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
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.9k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
420
swift-argument-parserで 簡単 CLI ツール作り
ryitto
1
180
Data Essentials in SwiftUI
ryitto
1
550
Composable Architecture
ryitto
0
820
CollectionViewの 新しいレイアウトの作り方
ryitto
0
85
Swift5.1 SwiftUI
ryitto
0
150
Other Decks in Programming
See All in Programming
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
6.2k
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
150
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
420
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
710
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
20
21k
Workers Cache を知る
syumai
0
320
FreeBSDでZabbixを動かす
kenkino
0
350
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
12
6k
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
120
Jetpack Compose Mechanisms
skydoves
2
220
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
610
Featured
See All Featured
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
Ethics towards AI in product and experience design
skipperchong
2
410
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
Between Models and Reality
mayunak
4
480
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
560
Rails Girls Zürich Keynote
gr2m
96
14k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
300
Believing is Seeing
oripsolob
1
240
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
350
BBQ
matthewcrist
89
10k
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