Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Accessing the Music Library
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Tomohiro Nishimura
March 30, 2016
Programming
2.9k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Accessing the Music Library
Tomohiro Nishimura
March 30, 2016
More Decks by Tomohiro Nishimura
See All by Tomohiro Nishimura
レガシーシステム洗い出し大作戦
sixeight
0
1.7k
我々のRealmはどこからやってくるのか
sixeight
1
450
まだ見ぬAPIに思いを馳せて
sixeight
0
160
復習OptionSet
sixeight
0
320
今年読んだまんが
sixeight
0
260
べんりな検索ワード
sixeight
0
280
Readable Width in action
sixeight
0
200
UIPreviewInteraction: Overview
sixeight
1
660
Web APIについての雑談
sixeight
0
420
Other Decks in Programming
See All in Programming
自分的「カンファレンスの楽しみ方」
syumai
0
110
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
8k
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
46
29k
私のClaude Code活用法 (個人開発編) - PHPerKaigi mini #4(2026/08/24)
panda_program
1
190
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
470
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
470
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
120
Webエンジニアなのにブラウザの仕組みがわからないので、Pythonで自作してみた
tatsuki12
4
1.5k
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
2
410
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
460
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
120
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4k
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
580
Ruling the World: When Life Gets Gamed
codingconduct
0
310
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.1k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
960
Mobile First: as difficult as doing things right
swwweet
225
10k
A Tale of Four Properties
chriscoyier
163
24k
Making Projects Easy
brettharned
120
6.7k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
520
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Transcript
"DDFTTJOH UIF.VTJD-JCSBSZ ؔϞόΠϧΞϓϦݚڀձ JE4JYFJHIU
·͓͖͑ w JE4JYFJHIU !UPNPIJ@SP w ג ͯͳ w J1IPOF͚ͩͨ͘
w
None
None
None
㊗"QQMF.VTJDղې
Ճ͞Εͨ"1*ʢൈਮ w 4,$MPVE4FSWJDF$POUSPMMFS w .1.FEJB-JCSBSZ w BEE*UFN8JUI1SPEVDU*%DPNQMFUJPO)BOEMFS w .1.VTJD1MBZFS$POUSPMMFS w
TFU2VFVF8JUI4UPSF*%T
4,$MPVE4FSWJDF$POUSPMMFS w BVUIPSJ[BUJPO4UBUVT w SFRVFTU"VUIPSJ[BUJPO @ w SFRVFTU$BQBCJMJUJFT8JUI$PNQMFUJPO)BOEMFS
@ w SFRVFTU4UPSFGSPOU*EFOUJpFS8JUI$PNQMFUJPO)B OEMFS @
4,$MPVE4FSWJDF$POUSPMMFS w BVUIPSJ[BUJPO4UBUVT w SFRVFTU"VUIPSJ[BUJPO @ w SFRVFTU$BQBCJMJUJFT8JUI$PNQMFUJPO)BOEMFS
@ w SFRVFTU4UPSFGSPOU*EFOUJpFS8JUI$PNQMFUJPO)B OEMFS @
switch SKCloudServiceController.authorizationStatus() { case .Authorized: // ڐՄ͞Ε͍ͯΔ case .Denied: //
ڐՄ͞Ε͍ͯͳ͍ case .NotDetermined: // ͲͪΒ͔ܾ·͍ͬͯͳ͍ (ڐՄΛٻΊΔඞཁ͕͋Δ) case .Restricted: // Ұ෦ͷػೳ͕ڐՄ͞Ε͍ͯΔ }
4,$MPVE4FSWJDF$POUSPMMFS w BVUIPSJ[BUJPO4UBUVT w SFRVFTU"VUIPSJ[BUJPO @ w SFRVFTU$BQBCJMJUJFT8JUI$PNQMFUJPO)BOEMFS
@ w SFRVFTU4UPSFGSPOU*EFOUJpFS8JUI$PNQMFUJPO)B OEMFS @
SKCloudServiceController.requestAuthorization { status in guard status == .Authorized || status
== .Restricted else { return } // ڐՄ͞Εͨʂ }
ݖݶ w ֬ೝͷμΠΞϩά͕ग़ΔͷͰ ϢʔβʔʹڐՄͯ͠Β͏ඞ ཁ͕͋Δ
ݖݶ w .&%*"@-*#3"3:ͱ͍͏ͷ ͕૿͑ͯΔ w ͜Ε͕༗ޮͰͳ͍ͱԿग़དྷ ͳ͍ w ϓϥΠόγʔͷઃఆʹՃ ͞Ε͍ͯΔ
4,$MPVE4FSWJDF$POUSPMMFS w BVUIPSJ[BUJPO4UBUVT w SFRVFTU"VUIPSJ[BUJPO @ w SFRVFTU$BQBCJMJUJFT8JUI$PNQMFUJPO)BOEMF
S @ w SFRVFTU4UPSFGSPOU*EFOUJpFS8JUI$PNQMFUJPO)B OEMFS @
let controller = SKCloudServiceController() controller.requestCapabilitiesWithCompletionHandler { (capabilities, error) in if
let error = error { print(error) fatalError() } if capabilities.contains(.MusicCatalogPlayback) { // ࠶ੜՄೳ } if capabilities.contains(.AddToCloudMusicLibrary) { // ϥΠϒϥϦͷՃՄೳ } }
4,$MPVE4FSWJDF$POUSPMMFS w BVUIPSJ[BUJPO4UBUVT w SFRVFTU"VUIPSJ[BUJPO @ w SFRVFTU$BQBCJMJUJFT8JUI$PNQMFUJPO)BOEMFS
@ w SFRVFTU4UPSFGSPOU*EFOUJpFS8JUI$PNQMFUJP O)BOEMFS @
4UPSFGSPOU*% w ֤ࠃͷJ5VOFT4UPSFΛද͢*% w "1*ͰϢʔβʔ͕"QQMF.VTJDͷܖΛ͍ͯ͠ Δࠃͷ*%ΛऔಘͰ͖Δ w ࠃ͝ͱʹ1SPEVDU*%͕มΘΔͷͰॏཁ w ͨͩ͠ʮ
ʯͷΑ͏ͳ*%ʹͳ͍ͬͯ ΔͷͰඇৗʹѻ͍ͮΒ͍ ͚ͩཉ͍͠
IUUQTB⒏MJBUFJUVOFTBQQMFDPNSFTPVSDFTEPDVNFOUBUJPOMJOLJOHUPUIFJUVOFTNVTJDTUPSFTUPSFGSPOU
४උྃ ⾣
࠶ੜ͢Δ w .1.VTJD1MBZFS$POUSPMMFS w TFU2VFVF8JUI4UPSF*%T
4UPSF*%
\ XSBQQFS5ZQFUSBDL LJOETPOH BSUJTU*E DPMMFDUJPO*E USBDL*E
BSUJTU/BNFϏʔτϧζ DPMMFDUJPO/BNF5IF#FBUMFT 5IF3FE"MCVN USBDL/BNF")BSE%BZT/JHIU DPMMFDUJPO$FOTPSFE/BNF5IF#FBUMFT 5IF3FE"MCVN USBDL$FOTPSFE/BNF")BSE%BZT/JHIU BSUJTU7JFX6SMIUUQTJUVOFTBQQMFDPNKQBSUJTUCJUPSV[VJE VP DPMMFDUJPO7JFX6SMIUUQTJUVOFTBQQMFDPNKQBMCVNBIBSEEBZTOJHIUJE USBDL7JFX6SMIUUQTJUVOFTBQQMFDPNKQBMCVNBIBSEEBZTOJHIUJE QSFWJFX6SMIUUQBQIPCPTBQQMFDPNVTS.VTJDWG BSUXPSL6SMIUUQJTN[TUBUJDDPNJNBHFUIVNC.VTJDWGBEDGBE BSUXPSL6SMIUUQJTN[TUBUJDDPNJNBHFUIVNC.VTJDWGBEDGBE BSUXPSL6SMIUUQJTN[TUBUJDDPNJNBHFUIVNC.VTJDWGBEDGB DPMMFDUJPO1SJDF USBDL1SJDF
IUUQTB⒏MJBUFJUVOFTBQQMFDPNSFTPVSDFTEPDVNFOUBUJPOJUVOFTTUPSFXFCTFSWJDFTFBSDIBQJTFBSDIJOH
ཉ͔ͬͨ͠ͷ w ࠶ੜ͍ͯ͠Δۂͷ4UPSF*% 1SPEVDU*% Λήοτ ͯ͠ڞ༗ͨ͠Γ͍ͨ͠ w J5VOFT4FBSDI"1*Ͱݕࡧͯ͠4UPSF*%Λήοτ ͢Δඞཁ͕͋Δ ݱ࣮
4UPSF*%͕͔ͬͯ ͍Δલఏͷ"1*
let player = MPMusicPlayerController.systemMusicPlayer() player.setQueueWithStoreIDs(["154657357", "1033055855"]) player.play()
let player = MPMusicPlayerController.systemMusicPlayer() player.setQueueWithStoreIDs(["154657357", "1033055855"]) player.play() ɿຊͷJ5.4Ͱ͔͠༗ޮ͡Όͳ͍
DPMMFDUJPO7JFX6SMIUUQTJUVOFTBQQMFDPNKQBMCVNBIBSEEBZTOJHIUJE USBDL7JFX6SMIUUQTJUVOFTBQQMFDPNKQBMCVNBIBSEEBZTOJHIUJE QSFWJFX6SMIUUQBQIPCPTBQQMFDPNVTS.VTJDWG BSUXPSL6SMIUUQJTN[TUBUJDDPNJNBHFUIVNC.VTJDWGBEDGBE BSUXPSL6SMIUUQJTN[TUBUJDDPNJNBHFUIVNC.VTJDWGBEDGBE BSUXPSL6SMIUUQJTN[TUBUJDDPNJNBHFUIVNC.VTJDWGBEDGB DPMMFDUJPO1SJDF USBDL1SJDF
SFMFBTF%BUF5; DPMMFDUJPO&YQMJDJUOFTTOPU&YQMJDJU USBDL&YQMJDJUOFTTOPU&YQMJDJU EJTD$PVOU EJTD/VNCFS USBDL$PVOU USBDL/VNCFS USBDL5JNF.JMMJT DPVOUSZ+1/ DVSSFODZ+1: QSJNBSZ(FOSF/BNFϩοΫ JT4USFBNBCMFUSVF ^
ϥΠϒϥϦʹՃ͢Δ w .1.FEJB-JCSBSZ w BEE*UFN8JUI1SPEVDU*%DPNQMFUJPO)BOEMFS
͜Ε͕ग़དྷΔ
let mediaLibrary = MPMediaLibrary.defaultMediaLibrary() mediaLibrary.addItemWithProductID("1078914477") { (entities, error) in if
let error = error { print(error) fatalError() } // Ճྃ }
ࡶଟͳ w ͢ͰʹՃࡁͷۂΛՃͯ͠େৎ w "1*ͰՃͯ͠ΞʔτϫʔΫऔಘ͞Εͳ͍ w .VTJDΞϓϦͰ։͍ͨΓ͢Δ͔͠ͳ͍ʁ w ফ͢͜ͱग़དྷͳ͍ͷͰςετͰڵຯͳ͍ۂΛՃ͠· ͘ΔͱͭΒ͍
w ࠶ੜ͚ͩΕͲΞϧόϜͷ4UPSF*%Λࢦఆ͢ΔͱɺΞ ϧόϜͷશۂ͕ରʹͳΔ
ໝ
w 1MBZMJTUͷڞ༗ w ଞਓ͕࡞ͬͨ1MBZMJTUΛฉ͍ͨΓ ϥΠϒϥϦʹՃग़དྷΔ w ϥδΦ w ΈΜͳͷϦΫΤετʹΑͬͯ 1MBZMJTUΛ࡞ͬͯΞϓϦ͔Βಉ࣌
ʹௌ͘ w ʜ w ͳΜ͔͏ͪΐͬͱ"1*͕ཉ͍͠ʂ
ؔϞό Ұʂ ͓ΊͰͱ͏͍͟͝·͢