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 Manager
Search
t.goda
February 03, 2023
Technology
0
78
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
260
App Clipについて
nivisunder7
1
56
Swift5.0 ABI安定化について
nivisunder7
0
210
SwiftUIの紹介
nivisunder7
0
25
Watch Kitのはまりどころ
nivisunder7
0
48
Docker in Docker Tips
nivisunder7
0
49
iOS11のここが素晴らしい
nivisunder7
0
75
iPhoneX時代のレイアウト
nivisunder7
0
83
SpriteKitでゲーム開発
nivisunder7
0
100
Other Decks in Technology
See All in Technology
LLMプロダクト事業の立ち上げにおける挑戦
layerx
PRO
7
1.4k
『QAという人』が必要ではなく、『QAという技術』が必要
sadonosake
2
460
SREsのためのSRE定着ガイド
netmarkjp
10
1.5k
XRミーティング 2024-03-20
1ftseabass
PRO
0
100
KubeCon EU: Unlocking new Platform Experiences with Open Interfaces
salaboy
1
360
BDD(Cucumber)コミュニティが無料提供しているコンテンツの紹介と現在起きている危機
nihonbuson
4
720
統計的学習理論読み Chapter 2
kmatsui
1
180
関数型DDDの理論と実践:「決定を遅らせる」を先につくり、 ビジネスの機動力と価値をあげる
knih
2
150
あらゆる商品を扱う商品データベースを再設計した話 / product db re-architecture
rince
7
3.2k
事業部を超えた 開発生産性向上に挑戦する
kentakozuka
5
930
技術広報経験0のEMがエンジニアブランディングをはじめてみた
coconala_engineer
1
120
やっていきテスト
k6s4i53rx
0
160
Featured
See All Featured
For a Future-Friendly Web
brad_frost
170
8.9k
Building Applications with DynamoDB
mza
88
5.6k
Testing 201, or: Great Expectations
jmmastey
27
6.3k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
39
4.3k
YesSQL, Process and Tooling at Scale
rocio
160
13k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
185
15k
Clear Off the Table
cherdarchuk
82
310k
How to name files
jennybc
62
92k
Principles of Awesome APIs and How to Build Them.
keavy
119
16k
Designing Experiences People Love
moore
135
23k
Typedesign – Prime Four
hannesfritz
36
2k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
18
6.8k
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の日々をお過ごしください