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
CA.swift#14
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ry-itto
May 19, 2021
Programming
5.8k
3
Share
CA.swift#14
ry-itto
May 19, 2021
More Decks by ry-itto
See All by ry-itto
決定版!?OSSアプリプロジェクトでのBeta版アプリ配布の方法「Xcode Cloud + TestFlight」
ryitto
0
400
swift-argument-parserで 簡単 CLI ツール作り
ryitto
1
170
Data Essentials in SwiftUI
ryitto
1
530
Composable Architecture
ryitto
0
800
CollectionViewの 新しいレイアウトの作り方
ryitto
0
78
Swift5.1 SwiftUI
ryitto
0
140
Other Decks in Programming
See All in Programming
AIとRubyの静的型付け
ukin0k0
0
480
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
2.4k
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
110
inferと仲良くなる10分間
ryokatsuse
1
290
AIエージェントの隔離技術の徹底比較
kawayu
0
450
Spec-Driven Development with AI-Agents: From High-Level Requirements to Working Software
antonarhipov
2
400
自動レビューエンジンの実装と運用 ~レビューのない世界へ~
kurukuru1999
2
300
プラグインで拡張される Context をtype-safe にする難しさと設計判断
kazupon
2
510
LLM Plugin for Node-REDの利用方法と開発について
404background
0
150
OCRを使ってゲームのアイテムをデータ化する
kishikawakatsumi
0
120
AI開発を加速するためにテスト戦略を言語化した
yoshihiro_shu
0
100
The Arts and Crafts of Work in the AI Era — Toward Mastery in Software Development
kuranuki
1
680
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
70
39k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
180
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
830
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
55k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.8k
Leo the Paperboy
mayatellez
7
1.8k
Google's AI Overviews - The New Search
badams
0
1k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
150
Are puppies a ranking factor?
jonoalderson
1
3.4k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
570
Transcript
isowords の構成で 3週間 開発して得た知見 2021/05/19 CA.swift #14 1
• iOS エンジニア として 21新卒入社 • 出身地:北海道恵庭市 • 出身校:会津大学 •
配属:メディア(ABEMA) @ry_itto ry-itto 伊藤凌也 (いとうりょうや) 2
話すこと • isowords とは • 従来のプロジェクト管理について • SPM+xcworkspace プロジェクト管理 ◦
メリット ◦ デメリット ◦ パッケージ管理について ▪ CocoaPods ▪ Carthage ◦ ツール周り • まとめ 3
isowords とは • Point-Free の作った SwiftUI, SceneKit を使ったゲームアプリ • SPM
を使用したプロジェクト・パッケージ管理 をしている • アセットの管理に git-lfs を使用している • アーキテクチャは Composable Architecture 4
従来のプロジェクト管理 5
従来の プロジェクト管理 種類 大きく分けて二つ • Pure な XcodeProject で構成 •
XcodeGen, Tuist 等で Project ファイルを生成せず構成 6 OR
従来の プロジェクト管理 課題 大きく分けて二つ • Pure な XcodeProject で構成 project.pbxproj
でのコンフリクト 多発 • XcodeGen, Tuist 等で Project ファイルを生成せず構成 → ツールメンテナーが対応しないと 新規機能など使用できない → 外部ツール依存が増える 7
SPM + xcworkspace プロジェクト管理 8
SPM + xcworkspace プロジェクト管理 概要 • アプリのソースを Swift Package として切り出した上で吐き出し、アプ
リケーションターゲットで使用する方 法 • ターゲットごとにリソースを持たせた りできる 9
10 ライブラリを吐き出す Framework に追加する
メリット その1 • ソースファイルを project.pbxproj で認識する必要がない • Pacakge.swift を使用して自由に ターゲットを作成できる
• 外部のツールが必要ない • Xcode で使える新機能が導入タイ ミングから使える 11
メリット その2 • プロジェクトごとアプリを分けること が懸念なくできる 12
メリット つまり • ソースファイルを project.pbxproj で認識する必要がない → コンフリクトが(ほぼ)しない • Pacakge.swift
を使用して自由に ターゲットを作成できる → マルチモジュール化が容易 → 差分ビルドを用いたビルド速度改 善が図れる 13
メリット つまり • ソースファイルを project.pbxproj で認識する必要がない → コンフリクトが(ほぼ)しない • Pacakge.swift
を使用して自由に ターゲットを作成できる → マルチモジュール化が容易 → 差分ビルドを用いたビルド速度改 善が図れる 14 XcodeGen や Tuist を使用するこ とによる美味しさも持っている
メリット つまり • 外部のツールが必要ない • Xcode で使える新機能が導入タイ ミングから使える • プロジェクトごとアプリを分けること
が懸念なくできる 15 他にないメリットも兼ね備えている
デメリット • Swift Package Sources 配下に ファイルを追加すると一定時間ビル ドができなくなる • SwiftUI
Previews が使えなくなる 場合がある • Package.swift を更新してもたまに “Resolving Package Graph” が 行われない 16
デメリット • Swift Package Sources 配下に ファイルを追加すると一定時間ビル ドができなくなる • SwiftUI
Previews が使えなくなる 場合がある • Package.swift を更新してもたまに “Resolving Package Graph” が 行われない 17 「できるはずのこと」ができない状態となっ てしまう(たまに)
パッケージ管理 • 基本的には SwiftPM経由でパッ ケージを入れるのが一番楽 • CocoaPods, Carthage 経由で入 れたものも導入は可能
• *.framework のみが公開されてい るものはそのままでは導入できない 18
パッケージ管理 Carthage • carthage での Pre-build 時に XCFramework を生成すればOK •
使い方 19
パッケージ管理 CocoaPods • Pods のプロジェクトをそのまま依存 に入れるのは難しかった → Pre-build する •
そもそもどうしてこれがしたい? → Podfile しかないライブラリがた まにある。。 サンプル https://github.com/ry-itto-playground/SPM-coc oapods 20
パッケージ管理 CocoaPods 21
パッケージ管理 CocoaPods • なぜ自前でビルドのスクリプトを書い たのか? → cocoapods-binary では xcframework で吐き出せなかった
ため。 22
ツール周り 配置 Mint 等を使用しない Swift 製ツールの 導入 ※ SPM +
xcworkspace プロジェクト管 理 じゃなくても使用可能。 23
ツール周り 追加方法 普通に dependencies に .package で Swift製ツールを追加するだけ 24
ツール周り 使い方 プロジェクトルートで --pacakge-path Tools を指定してツールを実行するだけ (swift run だと実行に若干のタイムラグ があるので、事前にビルドして使うのが良
いかもしれない) 25
ツール周り ありそうな質問 アプリ自体の Package.swift と同じとこ ろに依存を追加して使ってはダメなんで すか? 26 ダメです。追加したパッケージのどれか一 つでも
iOS/macOS に対応していない場 合アプリもビルドすることができなくなりま す
ツール周り つまりどころ 追加したパッケージが依存しているパッ ケージのバージョンが全く違うとエラーと なる 27 追加したパッケージの依存しているパッ ケージのバージョンを上げる or 追加したいパッケージ用に
Package.swift を作る
まとめ 28
まとめ • メリットを享受したければ XcodeGen を使うだけでも良さそう • XcodeGenを使用して開発する際に比べてストレスは多そう • XcodeGen 等が持っていないメリットを考えても絶対的な選定理由には
ならなさそう (”プロジェクトごとアプリを分けることが懸念なくできる” 次第) • まずは個人開発から導入して試してみると良さそう • 構成自体は非常に面白い • 固まるとかそれ以外の懸念がない 29
まとめ 30 プロダクションに導入しても良さそうか? 導入自体難しくない。 でもどちらのストレスの方が耐えられるのか十分に検証した方が良い
References • A Tour of isowords: Part 1 • A
Tour of isowords: Part 2 • Swift PMとマルチプロジェクトでBuild Configurationをクリーンに保つ • https://github.com/pointfreeco/isowords 31