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
SPM binaryTargetのTips
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
shima
July 27, 2023
Technology
2.8k
0
Share
SPM binaryTargetのTips
shima
July 27, 2023
Other Decks in Technology
See All in Technology
20260515 OpenIDファウンデーション・ジャパンご紹介
oidfj
0
160
GCASアップデート(202603-202605)
techniczna
0
210
オライリーイベント登壇資料「鉄リサイクル・産廃業界におけるAI技術実応用のカタチ」
takarasawa_
0
410
Gaussian Splattingの表現力を拡張する — 高周波再構成とインタラクションへのアプローチ —
gpuunite_official
0
190
おいらのAWSアップデートの追い方〜Slack×AgentCore〜
yakumo
1
110
JTCでRedmine利用者2700人を実現した手法 第二部
nobuonakamura
0
130
Cortex(Code) を ML モデルの 精度改善サイクルに組み込む.pdf
oimo23
0
160
AI全盛の今だからこそ、あえてもう一度振り返るAPIの基礎
smt7174
3
120
Purview 勉強会報告 Microsoft Purview 入門しようとしてみた
masakichixo
1
440
最新技術を"今は選ばない"という技術選定
leveragestech
PRO
0
190
Claude Code で使える DuckDB Skills を試してみた / DuckDB Skills and Claude Code
masahirokawahara
1
730
O'Reilly Infrastructure & Ops Superstream: Platform Engineering for Developers, Architects & the Rest of Us
syntasso
0
260
Featured
See All Featured
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
690
The Cult of Friendly URLs
andyhume
79
6.9k
Become a Pro
speakerdeck
PRO
31
5.9k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.9k
Deep Space Network (abreviated)
tonyrice
0
140
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
530
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
270
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.7k
Designing Powerful Visuals for Engaging Learning
tmiket
1
370
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
190
Reality Check: Gamification 10 Years Later
codingconduct
0
2.1k
The agentic SEO stack - context over prompts
schlessera
0
780
Transcript
Swift Package Manager binaryTargetのtips potatotips #83 - 2023/7/21
自己紹介 島 健人 MedPeerのiOSエンジニア 歩数計アプリを担当しています。
担当プロジェクトにCocoaPodsにしか対応していないライブラリを入 れることになりました。 ここでは HogeSDK と呼ばせていただきます。 プロジェクトではCarthageとSPMを使用中。 Carthageの依存も減らしていってSPMに移行したい段階。 今からCococaPodsの導入はちょっと...
SPMのリポジトリを作ってどうにかすることに HogeSDKと依存先のライブラリ( DependencyA )はXCFrameworkが公開されていたため、 SPMに binaryTarget で置いてしまえば何とかなるだろうと思ってリポジトリを作ってみま した。
let package = Package( name: "HogeSDK", products: [ .library( name:
"HogeSDK", targets: [ "HogeSDK" ] ) ], dependencies: [], targets: [ .binaryTarget( name: "HogeSDK", path: "HogeSDK.xcframework" ), .binaryTarget( name: "DependencyA", path: "DependencyA.xcframework" ) ] )
依存関係でつまづく binaryTarget には dependency を指定することができず、 Package の dependencies に binaryTarget
を書くこともできないため、 このままでは依存関係を解決することができませんでした。
Targetを作って依存を解決する SPMのルートディレクトリに HogeSDKTarget というディレクトリを作成して、 HogeSDKTarget.swift というファイルを設置します(中身は空でいいです)。 Package.swift に新規の target を追加して、
HogeSDK と DependencyA どちらも dependencies に記述します。 そしてPackageの products の targets に HogeSDKTarget を記述します。
let package = Package( name: "HogeSDK", products: [ .library( name:
"HogeSDK", targets: [ "HogeSDKTarget" ] ) ], target: ~ 省略~ .target( name: "HogeSDKTarget", dependencies: ([ .target(name: "HogeSDK"), .target(name: "DepencencyA") ]) ),
これで依存関係が解決され、アプリで利用することができるようになりました。 linkerSettings の記載やbundleが必要な場合も同じようにtargetに追加すれば大丈夫で す。
まとめ .binaryTarget で取り込んだライブラリに直接 dependencies を書くことはできな い。 依存元と依存先の両方を dependencies に含んだ target
を作ることで依存の解決がで きる。 ライブラリによってはこの形式にしてもうまくいかないことがありましたが、条件 がよくわからなかった。 今回のようなケース以外にも、社内ライブラリのSPM対応等で使えると思うので、 依存関係でつまづいた際は試してみるといいかと思います。
ありがとうございました!