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
410
App Clipについて
nivisunder7
1
72
Swift5.0 ABI安定化について
nivisunder7
0
380
SwiftUIの紹介
nivisunder7
0
36
Watch Kitのはまりどころ
nivisunder7
0
57
Docker in Docker Tips
nivisunder7
0
58
iOS11のここが素晴らしい
nivisunder7
0
80
iPhoneX時代のレイアウト
nivisunder7
0
97
SpriteKitでゲーム開発
nivisunder7
0
110
Other Decks in Technology
See All in Technology
システム標準化PMOから ガバメントクラウドCoEへ
techniczna
1
120
"作る"から"使われる"へ:Backstage 活用の現在地
sbtechnight
0
180
JAWSDAYS2026 [C02] 楽しく学ぼう!AWSとは?AWSの歴史 入門
hiragahh
0
170
Oracle Cloud Infrastructure IaaS 新機能アップデート 2025/12 - 2026/2
oracle4engineer
PRO
0
170
It’s “Time” to use Temporal
sajikix
3
210
Agent ServerはWeb Serverではない。ADKで考えるAgentOps
akiratameto
0
110
visionOS 開発向けの MCP / Skills をつくり続けることで XR の探究と学習を最大化
karad
1
530
コンテキスト・ハーネスエンジニアリングの現在
hirosatogamo
PRO
3
420
フロントエンド刷新 4年間の軌跡
yotahada3
0
480
Sansanでの認証基盤内製化と移行
sansantech
PRO
0
550
TypeScript 7.0の現在地と備え方
uhyo
7
1.7k
(Test) ai-meetup slide creation
oikon48
3
430
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
46
8.1k
4 Signs Your Business is Dying
shpigford
187
22k
Navigating Team Friction
lara
192
16k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
180
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.5k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
Docker and Python
trallard
47
3.8k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.3k
What's in a price? How to price your products and services
michaelherold
247
13k
Visualization
eitanlees
150
17k
GitHub's CSS Performance
jonrohan
1032
470k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
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の日々をお過ごしください