Slide 1

Slide 1 text

Xcodegenを 個人アプリに導入 2021 年 3 月 17 日 集まれ Swift 好き! Swift 愛好会 vol.58 @ オンライン

Slide 2

Slide 2 text

Who am I ● Name ● 佐藤タケシ ( さとうたけし ) ● Company ● Merpay, Inc.(2019/01 ~) ● Role ● Software Engineer (iOS) ● Account ● Twitter: @hatakenokakashi ● Facebook: 佐藤剛士 ● GitHub: SatoTakeshiX

Slide 3

Slide 3 text

Xcodegenを個人アプリに導入 ● 導入経緯 ● Xcodegen って何? ● 簡単な使い方 ● 具体的な導入手順 ● Xcode 12 と Carthage 対応 ● CocoaPods と Firebase Crashlytics 対応 ● まとめ

Slide 4

Slide 4 text

導入経緯

Slide 5

Slide 5 text

玄空飛星風水 アプリ ● 飛星図を自動で作成 ● 玄空飛星風水、八宅風水で診 断 ● 自宅や引越し先の間取りから 運勢判断 難しい飛星図作成が すぐできる!

Slide 6

Slide 6 text

アプリプロジェクト問題点 ● 3年前に作ったプロジェクトで構成が自分でも把握できなくなっている ● Firebase Crashlytics や Firebase Analytics でユーザーのログを取りたい ● アプリプロジェクトは本番用しかないので、開発がしにくい。 ● 開発用アプリを作成したいがプロジェクト管理が煩雑になるのを避けたい

Slide 7

Slide 7 text

アプリプロジェクト問題点 ● 3年前に作ったプロジェクトで構成が自分でも把握できなくなっている ● Firebase Crashlytics や Firebase Analytics でユーザーのログを取りたい ● アプリプロジェクトは本番用しかないので、開発がしにくい。 ● 開発用アプリを作成したいがプロジェクト管理が煩雑になるのを避けたい Xcodegen でプロジェクト管理しよう!

Slide 8

Slide 8 text

Xcodegenって何?

Slide 9

Slide 9 text

Xcodegenとは ● Xcode プロジェクト作成ツール ● yaml ファイルでプロジェクトを管理 ● Xcode 上でプロジェクトを管理しなくても良くなる ● 結果としてスキーム、テストターゲット、アプリケーションターゲットの作成が 簡単になる https://github.com/yonaskolb/XcodeGen

Slide 10

Slide 10 text

簡単な使い方

Slide 11

Slide 11 text

project.yml

Slide 12

Slide 12 text

Xcodeプロジェクト作成

Slide 13

Slide 13 text

Xcodeプロジェクト bundleIdPrefixで指定した値 + Target 名がBundle Identifierになる

Slide 14

Slide 14 text

設定したいKeyの見つけ方 Xcodeで設定を変えてみる

Slide 15

Slide 15 text

設定したいKeyの見つけ方 変わったKeyを確認 SUPPORTS_MACCATALYST が変わった

Slide 16

Slide 16 text

project.ymlに反映

Slide 17

Slide 17 text

具体的な導入手順

Slide 18

Slide 18 text

導入前のプロジェクト構成 独自のフレームワークを作成 アプリで読み込む 独自フレームワークそれぞれにプロ ジェクトを作成 アプリプロジェクトは本番用、開発用2 つ作る

Slide 19

Slide 19 text

独自フレームワークでのライブラリー依存指定 RxSwift 独自フレームワーク RxSwift 独自フレームワーク embed: fase embed: true

Slide 20

Slide 20 text

本番アプリ、開発アプリを分ける targetを本番用開発用作成 sourcesでConfigファイルを切り分ける

Slide 21

Slide 21 text

最終的なアプリ構成

Slide 22

Slide 22 text

Xcode 12とCarthage対応

Slide 23

Slide 23 text

Xcode 12でCarthageでビルド失敗 ● Carthage はそれぞれの CPU アーキテクチャ用のバイナリを lipo ツールで一 つのバイナリにまとめている ● Xcode 12 から iOS シミュレーター用のバイナリが、従来の Intel 製 CPU の x86_64 用バイナリに加えて Apple Silicon の arm64 用バイナリを含むように なった ● lipo の制限で実機用の arm64 バイナリとシュミレーター用 arm64 バイナリが一 つのファットバイナリにまとめることができない

Slide 24

Slide 24 text

Carthage 0.37でXCFrameworkでビルド ● Xcode 11 から登場した、複数のフレームワークを 1 つにまとめられる仕組み ● lipo は一つのバイナリに複数アーキテクチャ用バイナリを含める ● XCFramework は単体アーキテクチャフレームワークを一つのフォルダにま とめる ● --use-xcframeworks オプションをつける ● Build Phase の copy-frameworks も不要になる

Slide 25

Slide 25 text

Carthage 0.37でXCFrameworkでビルド Xcodegenでxcframework指定

Slide 26

Slide 26 text

CocoaPodsとFirebase Crashlytics対応

Slide 27

Slide 27 text

XcodegenのプロジェクトをCocoapodsで使う Yaml Xcodegen Cocoapods

Slide 28

Slide 28 text

Firebase Crashlyticsを初期化する

Slide 29

Slide 29 text

Podfileに初期化スクリプト

Slide 30

Slide 30 text

まとめ

Slide 31

Slide 31 text

まとめ ● Xcodegen は Xcode プロジェクト作成ツール ● yaml ファイルからプロジェクトを生成 ● 具体的な導入手順 ● Carthage を利用するには XCFramework でビルドする ● Firebase Crashlytics の初期化スクリプトは CocoaPods で管理する

Slide 32

Slide 32 text

参考資料 ● Firebase Crashlytics を使ってみる ● Xcode12 時代の Carthage で起こった問題と XCFramework への移行 ● [2021 年版 ]Xcodegen で Carthage と Cocoapods を使う最小プロジェクトを作 成 ● Binary Frameworks in Swift ● “Do Not Embed”, “Embed & Sign”, “Embed Without Signing”. What are they?. What they do? ● lipo を使って簡単に Universal Binary を作成する方法

Slide 33

Slide 33 text

● SwiftUI を始める最適な一冊 ● SwiftUI の基礎を徹底解説 ○ レイアウトシステム ○ 座標空間 ○ データ管理 ○ UI コンポーネント ● 実践的なサンプルアプリ ○ GitHub API ○ お絵かきアプリ ○ 写真フィルターアプリ ● iOS 14 対応 ○ LazyVStack 、 LazyVGrid 、 WidgetKit 、 @StateObjectなど 「SwiftUI開発レシピ amazon」で検 索!

Slide 34

Slide 34 text

豊富なサンプル アプリ ● GitHub リポジトリー検索 ● お絵かきアプリ ● 写真フィルターアプリ ● Todo アプリを Widget 対応 「SwiftUI開発レシピ amazon」で検 索!