Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Distribute Binary Framework with Swift Package ...
Search
t.goda
February 03, 2023
Technology
0
120
Distribute Binary Framework with Swift Package Manager
t.goda
February 03, 2023
Tweet
Share
More Decks by t.goda
See All by t.goda
XCTestでAPIのテストコードを書く
nivisunder7
0
390
App Clipについて
nivisunder7
1
70
Swift5.0 ABI安定化について
nivisunder7
0
370
SwiftUIの紹介
nivisunder7
0
34
Watch Kitのはまりどころ
nivisunder7
0
56
Docker in Docker Tips
nivisunder7
0
58
iOS11のここが素晴らしい
nivisunder7
0
80
iPhoneX時代のレイアウト
nivisunder7
0
95
SpriteKitでゲーム開発
nivisunder7
0
110
Other Decks in Technology
See All in Technology
コンテキスト情報を活用し個社最適化されたAI Agentを実現する4つのポイント
kworkdev
PRO
1
1.6k
ChatGPTで論⽂は読めるのか
spatial_ai_network
11
29k
.NET 10の概要
tomokusaba
0
120
文字列の並び順 / Unicode Collation
tmtms
3
610
Fashion×AI「似合う」を届けるためのWEARのAI戦略
zozotech
PRO
2
850
初めてのDatabricks AI/BI Genie
taka_aki
0
200
Lessons from Migrating to OpenSearch: Shard Design, Log Ingestion, and UI Decisions
sansantech
PRO
1
150
Amazon Quick Suite で始める手軽な AI エージェント
shimy
0
210
30分であなたをOmniのファンにしてみせます~分析画面のクリック操作をそのままコード化できるAI-ReadyなBIツール~
sagara
0
180
AIの長期記憶と短期記憶の違いについてAgentCoreを例に深掘ってみた
yakumo
4
440
2025-12-18_AI駆動開発推進プロジェクト運営について / AIDD-Promotion project management
yayoi_dd
0
110
AI時代の新規LLMプロダクト開発: Findy Insightsを3ヶ月で立ち上げた舞台裏と振り返り
dakuon
0
210
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
The Invisible Side of Design
smashingmag
302
51k
4 Signs Your Business is Dying
shpigford
186
22k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.2k
Designing for humans not robots
tammielis
254
26k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
How GitHub (no longer) Works
holman
316
140k
Why Our Code Smells
bkeepers
PRO
340
57k
A designer walks into a library…
pauljervisheath
210
24k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Docker and Python
trallard
47
3.7k
Transcript
Distribute Binary Framework with Swift Package Manager
Why Binary Framework • プロプライエタリ・ソフトウェアとして配布したいため • 要するにソースコードを開示したくない • SwiftではXCFrameworkという形式で配布
What is XCFramework? • Xcodeによって生成される配布可能なbinary package • マルチプラットフォーム対応 • iOS,
macOS, tvOS etx… • あとsimulator対応も • Dynamic、Static、どちらの形式もあり
How to create • New>Project>Frameworkを選択 • なんかFrameworkがかばんのアイコンなのってなんで?
How to write source code • 右図の構成でプロジェクトが生成される • ここで注意すること •
Resourcesってあるからいってその下にファイルを置かな い • 正確にはソースコードはtttフォルダ直下に配置 • (なんか本棚のアイコンの下においてはだめ) • そのフォルダ以下はビルド対象外になる • 多分画像とかそういうの置くところ • これに気づくまで半日かかった
Trap of build setting • Build Settingsの Build Library for
DistributionをYESにすること • これしとかないとこける • 調べたけど何なのかはよくわからない • 文字通り受け取るならYESにしないと配布用のラ イブラリをビルドできない
How to write source code 2 • こんな感じでhoge.swiftファイルを作成 • いつもどおりビルド!
• 終わり! • テストコードは可能な限り書きましょう • Frameworkなので毎回アプリに組み込むまで動作 が保証されないのはめんどくさいため • つまり自分のためです • みんなも動作が保証されて幸せになります • WinWin
How to create binary(XCFramework) • Shellスクリプトを叩く
英語タイトル飽きた 何をやっているか • キモの部分 • xcodebuild archive〜 • 各プラットフォーム向けの.fraeworkの作成 •
Xcodeuild –create-xcframework〜 • 上記で作成した.frameworkをまとめて.xcframeworkにする • 結合したものを作成するのではなく、単にまとめただけなのがポイント
XCFramework, Framework • 過去Frameworkでは各種platform向けのbinaryを生成した上で、1つの binaryにFrameworkとして出力 • XCFrameworkでは各種Platform向けbinary(framework)を生成し、そ れを1つのディレクトリにまとめている • binaryそのものを個別に用意できるようになった
• 何がいいのか? • Simulator向けアーキテクチャのbinaryとか入ってるとstoreにアップする際に蹴ら れたりする • なのでsimuator向けのbinaryがないFrameworkとかあった • 当然simulatorでビルドできないので困る • XCFrameworkだとアーキテクチャ別にbinaryがあるので、この問題が起きない
Swift Package Manager • Xcodeにデフォルトで用意されているライブラリ管理ツール • ようやくメジャーなライブラリがSPMに対応してきた • わりと便利 •
対抗 • CocoaPods • Carthage
SPMでの配布対応 • XCFrameworkとPackage.jsonを準備 • Package.jsonは配布のための諸々が書いてあるファイル
Package.swiftのキモ • .binaryTarget • Binary形式で配布することを示す • Nameはまんま、urlはgithub等のサーバーにアップしてあるzipファイル • Checksumは上記zipファイルのchecksum、DL時にXcodeが改変がないかを判定 するために利用
• 間違ってるとエラーが出て止めてくれる
まとめ • Frameworkとしてプロジェクトを作成 • ソースコードの作成 • Build Settingsの調整 • xcodebuildを使ってXCFrameworkを作成
• Package.swiftを作成 • 配布
ちょっとまって • 突然githubのURLとか出てきたけどなに? • Framework配布のためのgithubリポジトリ • プロプライエタリなので、XCFrameworkとPackage.swiftだけがおいてある
つまり • ソースコード(Frameworkの中身)を管理するgithubリポジトリも必用 ソースコード修正>PR作成>マージ>XCFrameworkビルドして出力> XCFrameworkをおいてあるgithubにXCFrameworkをアップ、 package.swiftを修正>PR作成>マージ>リリースタグ作成
やることが、やることが多い……!(画像略) • CIを利用しましょう • ソースコード修正>PRがマージされる>CIが走る>CIでXCFramework作成 >githubのプロジェクトにアップ くらいまでやれたらいいな
おわりに • いまなんでも自動化できるのでCIは積極的に活用していきましょう • どこまで(Package.swiftとかの出力も?)やるかは要相談 • 楽しいSPMの日々をお過ごしください