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
430
まだ見ぬ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
Webフレームワークの ベンチマークについて
yusukebe
0
160
エージェンティックRAGにAWSで入門しよう!
har1101
8
1.4k
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
780
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
260
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
220
Why Laravel apps break—Mastering the fundamentals to keep them maintainable
kentaroutakeda
1
350
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
710
Copilot CLI の継戦能力を高める コンテキスト管理
nozomutu
1
1.2k
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
2k
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.6k
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
120
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
340
Featured
See All Featured
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
160
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
140
Optimizing for Happiness
mojombo
378
71k
It's Worth the Effort
3n
188
29k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
320
Writing Fast Ruby
sferik
630
63k
Raft: Consensus for Rubyists
vanstee
141
7.5k
Skip the Path - Find Your Career Trail
mkilby
1
140
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2k
Docker and Python
trallard
47
3.9k
Bash Introduction
62gerente
615
220k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
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*͕ཉ͍͠ʂ
ؔϞό Ұʂ ͓ΊͰͱ͏͍͟͝·͢