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
shima
July 27, 2023
Technology
0
2.7k
SPM binaryTargetのTips
shima
July 27, 2023
Tweet
Share
Other Decks in Technology
See All in Technology
プロダクト成長を支える開発基盤とスケールに伴う課題
yuu26
4
1.3k
Bedrock PolicyでAmazon Bedrock Guardrails利用を強制してみた
yuu551
0
230
Amazon S3 Vectorsを使って資格勉強用AIエージェントを構築してみた
usanchuu
3
450
Context Engineeringの取り組み
nutslove
0
340
コスト削減から「セキュリティと利便性」を担うプラットフォームへ
sansantech
PRO
3
1.5k
Digitization部 紹介資料
sansan33
PRO
1
6.8k
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
~Everything as Codeを諦めない~ 後からCDK
mu7889yoon
3
350
AI駆動PjMの理想像 と現在地 -実践例を添えて-
masahiro_okamura
1
110
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
270
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.6k
モダンUIでフルサーバーレスなAIエージェントをAmplifyとCDKでサクッとデプロイしよう
minorun365
4
200
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
120
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
3.9k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Thoughts on Productivity
jonyablonski
74
5k
Discover your Explorer Soul
emna__ayadi
2
1.1k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
85
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
310
RailsConf 2023
tenderlove
30
1.3k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
0
250
Ruling the World: When Life Gets Gamed
codingconduct
0
140
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.3k
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対応等で使えると思うので、 依存関係でつまづいた際は試してみるといいかと思います。
ありがとうございました!