Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
430
Other Decks in Programming
See All in Programming
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
150
一人だけ、Kiroが静止する日
hideg
0
120
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
500
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
140
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
150
Intent as Code
shoppingjaws
6
1k
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
370
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
3k
wkhtmltopdfの次どうするか問題2026
willnet
2
1.5k
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
180
Heart of Swift Concurrency
koher
0
910
AI × TiDD / 2026.09.05 Redmine 大阪
tokudiro
1
180
Featured
See All Featured
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
320
Designing Powerful Visuals for Engaging Learning
tmiket
1
570
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
280
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Visualization
eitanlees
152
17k
sira's awesome portfolio website redesign presentation
elsirapls
0
420
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.6k
Why Our Code Smells
bkeepers
PRO
340
58k
From π to Pie charts
rasagy
1
370
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*͕ཉ͍͠ʂ
ؔϞό Ұʂ ͓ΊͰͱ͏͍͟͝·͢