Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Distribute Binary Framework with Swift Package ...
Search
t.goda
February 03, 2023
Technology
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Distribute Binary Framework with Swift Package Manager
t.goda
February 03, 2023
More Decks by t.goda
See All by t.goda
XCTestでAPIのテストコードを書く
nivisunder7
0
420
App Clipについて
nivisunder7
1
82
Swift5.0 ABI安定化について
nivisunder7
0
390
SwiftUIの紹介
nivisunder7
0
43
Watch Kitのはまりどころ
nivisunder7
0
63
Docker in Docker Tips
nivisunder7
0
63
iOS11のここが素晴らしい
nivisunder7
0
88
iPhoneX時代のレイアウト
nivisunder7
0
100
SpriteKitでゲーム開発
nivisunder7
0
120
Other Decks in Technology
See All in Technology
AI時代の「技術的負債」の変質ー概念の終焉と再解釈、エージェントと共に向かう先
nwiizo
0
1.4k
AIで仕事のやり方を変える
matsu7874
3
1.1k
SREは、MCPとAutopilotをこう使え!
kazumax55
1
450
synctest時代のhttptest Go 1.27で変わるHTTPサーバテストの裏側 / go conference2026 synctest and httptest
budougumi0617
1
2.8k
OpenTelemetryのメトリクスをCloudWatchに送ってPromQLで見てみた
ota1022
0
140
技術的負債から考える、AI時代のエンジニアリング投資 — ビズリーチの技術的負債と向き合った経験から、変更し続けられるソフトウェアを考える/ technical-debt-con2026
visional_engineering_and_design
1
300
Gitは怖い?共有ワークスペースから始めるSnowflakeチーム開発
coco_se
0
200
From Vanilla Kubernetes to a Batteries-Included Platform: Developer Experience at 1,300+ Clusters
yosshi_
0
710
家のリアーキテクト・リファクタリング
suguruooki
0
140
OpenTelemetry eBPF Instrumentationの舞台裏 / Behind the Scenes of OpenTelemetry eBPF Instrumentation
ymotongpoo
4
1.2k
なぜJMBC(Japan MCP Business Community)? MCPってどう活用できるの?
cdataj
0
110
Adaptive Warehouse を今すぐ導入すべき理由と迷ったときの判断基準
__allllllllez__
0
210
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
520
The Cult of Friendly URLs
andyhume
79
7k
BBQ
matthewcrist
89
10k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
How to make the Groovebox
asonas
2
2.4k
Are puppies a ranking factor?
jonoalderson
2
3.9k
Designing for Timeless Needs
cassininazir
1
470
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
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の日々をお過ごしください