Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SPM binaryTargetのTips
Search
shima
July 27, 2023
Technology
0
2.6k
SPM binaryTargetのTips
shima
July 27, 2023
Tweet
Share
Other Decks in Technology
See All in Technology
業務のトイルをバスターせよ 〜AI時代の生存戦略〜
staka121
PRO
2
200
Lookerで実現するセキュアな外部データ提供
zozotech
PRO
0
110
MLflowダイエット大作戦
lycorptech_jp
PRO
1
120
評価駆動開発で不確実性を制御する - MLflow 3が支えるエージェント開発
databricksjapan
1
180
因果AIへの招待
sshimizu2006
0
980
Edge AI Performance on Zephyr Pico vs. Pico 2
iotengineer22
0
160
年間40件以上の登壇を続けて見えた「本当の発信力」/ 20251213 Masaki Okuda
shift_evolve
PRO
1
130
Fashion×AI「似合う」を届けるためのWEARのAI戦略
zozotech
PRO
2
540
品質のための共通認識
kakehashi
PRO
3
260
[デモです] NotebookLM で作ったスライドの例
kongmingstrap
0
150
「図面」から「法則」へ 〜メタ視点で読み解く現代のソフトウェアアーキテクチャ〜
scova0731
0
160
学習データって増やせばいいんですか?
ftakahashi
2
340
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
A better future with KSS
kneath
240
18k
Site-Speed That Sticks
csswizardry
13
1k
Designing for Performance
lara
610
69k
Navigating Team Friction
lara
191
16k
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Embracing the Ebb and Flow
colly
88
4.9k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
Git: the NoSQL Database
bkeepers
PRO
432
66k
What's in a price? How to price your products and services
michaelherold
246
13k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
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対応等で使えると思うので、 依存関係でつまづいた際は試してみるといいかと思います。
ありがとうございました!