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
Distribute Binary Framework with Swift Package ...
Search
t.goda
February 03, 2023
Technology
0
130
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
400
App Clipについて
nivisunder7
1
71
Swift5.0 ABI安定化について
nivisunder7
0
370
SwiftUIの紹介
nivisunder7
0
36
Watch Kitのはまりどころ
nivisunder7
0
57
Docker in Docker Tips
nivisunder7
0
58
iOS11のここが素晴らしい
nivisunder7
0
80
iPhoneX時代のレイアウト
nivisunder7
0
96
SpriteKitでゲーム開発
nivisunder7
0
110
Other Decks in Technology
See All in Technology
変化するコーディングエージェントとの現実的な付き合い方 〜Cursor安定択説と、ツールに依存しない「資産」〜
empitsu
4
1.4k
OpenShiftでllm-dを動かそう!
jpishikawa
0
110
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
300
Context Engineeringが企業で不可欠になる理由
hirosatogamo
PRO
3
590
AWS Network Firewall Proxyを触ってみた
nagisa53
1
230
ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup
torounit
0
470
SREチームをどう作り、どう育てるか ― Findy横断SREのマネジメント
rvirus0817
0
270
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
2
250
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
2
200
Agile Leadership Summit Keynote 2026
m_seki
1
620
Introduction to Bill One Development Engineer
sansan33
PRO
0
360
Red Hat OpenStack Services on OpenShift
tamemiya
0
110
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
515
110k
How to make the Groovebox
asonas
2
1.9k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
110
Optimizing for Happiness
mojombo
379
71k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
730
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
3.9k
Evolving SEO for Evolving Search Engines
ryanjones
0
120
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
140
Skip the Path - Find Your Career Trail
mkilby
0
56
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
110
Code Reviewing Like a Champion
maltzj
527
40k
Visualization
eitanlees
150
17k
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の日々をお過ごしください