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.3k
SPM binaryTargetのTips
shima
July 27, 2023
Tweet
Share
Other Decks in Technology
See All in Technology
CloudWatch 大好きなSAが語る CloudWatch キホンのキ
o11yfes2023
0
150
watsonx.data上のベクトル・データベース Milvusを見てみよう/20250418-milvus-dojo
mayumihirano
0
110
LiteXとオレオレCPUで作る自作SoC奮闘記
msyksphinz
0
530
はてなの開発20年史と DevOpsの歩み / DevOpsDays Tokyo 2025 Keynote
daiksy
6
1.5k
Dynamic Reteaming And Self Organization
miholovesq
2
160
Road to Go Gem #rubykaigi
sue445
0
220
Spice up your notifications/try!Swift25
noppefoxwolf
2
350
AWS Control Towerを 数年運用してきての気づきとこれから/aws-controltower-ops-tips
tadayukinakamura
0
120
いつも初心者向けの記事に助けられているので得意分野では初心者向けの記事を書きます
toru_kubota
2
300
ソフトウェア開発現代史: "LeanとDevOpsの科学"の「科学」とは何か? - DORA Report 10年の変遷を追って - #DevOpsDaysTokyo
takabow
0
370
Micro Frontends: Necessity, Implementation, and Challenges
rainerhahnekamp
2
470
彩の国で始めよう。おっさんエンジニアから共有したい、当たり前のことを当たり前にする技術
otsuki
0
140
Featured
See All Featured
Become a Pro
speakerdeck
PRO
27
5.3k
How to train your dragon (web standard)
notwaldorf
90
6k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
5
540
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.4k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.8k
Java REST API Framework Comparison - PWX 2021
mraible
30
8.5k
Gamification - CAS2011
davidbonilla
81
5.2k
Automating Front-end Workflow
addyosmani
1369
200k
Bash Introduction
62gerente
611
210k
Faster Mobile Websites
deanohume
306
31k
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対応等で使えると思うので、 依存関係でつまづいた際は試してみるといいかと思います。
ありがとうございました!