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
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
440
まだ見ぬAPIに思いを馳せて
sixeight
0
160
復習OptionSet
sixeight
0
310
今年読んだまんが
sixeight
0
260
べんりな検索ワード
sixeight
0
270
Readable Width in action
sixeight
0
200
UIPreviewInteraction: Overview
sixeight
1
650
Web APIについての雑談
sixeight
0
420
Other Decks in Programming
See All in Programming
OS アップデート対応の取り組み方がもっと共有されてほしい
andpad
0
110
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
320
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
350
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
0
100
共通化で考えるべきは、実装より公開する型だった
codeegg
0
220
自作OSでスライド発表する
uyuki234
1
3.8k
act1-costs.pdf
sumedhbala
0
210
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
510
1年で人数1.5倍、PR数5.5倍増。 品質とアウトカムはどうなったか、 何が効いたか
ike002jp
0
120
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
0
200
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
370
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
200
Featured
See All Featured
The Spectacular Lies of Maps
axbom
PRO
1
860
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
The SEO Collaboration Effect
kristinabergwall1
1
500
My Coaching Mixtape
mlcsv
0
170
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.5k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
370
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
220
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*͕ཉ͍͠ʂ
ؔϞό Ұʂ ͓ΊͰͱ͏͍͟͝·͢