Slide 1

Slide 1 text

社内 fastlane 勉強会

Slide 2

Slide 2 text

Classi 社内で fastlane 勉強会をした時の資料です。 社内向けのため、 語尾が雑だったりしますがご了承ください。

Slide 3

Slide 3 text

目的 fastlane とは何かざっくり理解する。

Slide 4

Slide 4 text

fastlane を 一言で言うと iOS / Android で継続的デリバリー するためのツー ル

Slide 5

Slide 5 text

例題 新しい UDID にアプリのベー タ版を配布して ください

Slide 6

Slide 6 text

真心を込めて手動で配布 1. Apple Developer を開く 2. 大抵ログインが切れてるのでログインし直す 3. Devices に UDID 登録 4. 証明書を更新してダウンロー ド 5. ダウンロー ドした証明書をダブルクリックしてインストー ル 6. Xcode を開いて証明書を確認してみる 7. 証明書が古いままになってるのに気がつく 8. Xcode の Accounts から証明書一覧を見て Data Created が古いの を消す

Slide 7

Slide 7 text

9. 最新の証明書が使われているのを確認する 古い証明書を revoke すると他のメンバー がその証明書を使っ ていた場合それが使えなくなる 10. Xcode で Target Device を Generic iOS Device にして Archive Build 11. Organizer が開くので、 Export から AdHoc 版を選ぶ 12. 出力された ipa ファイルをこんなコマンドでアップロー ド . / C r a s h l y t i c s . f r a m e w o r k / s u b m i t S E C R E T _ K E Y S E C R E T _ T O K E N n o t i f i c a t i o n s Y E S - i p a P a t h . / H o g e . i p a 13. ベー タ版の配布が成功したら Slack でみんなに通知

Slide 8

Slide 8 text

ここまで 30 分!!!!!!! これ 1 日 3 回とかやれとか言われたら病む

Slide 9

Slide 9 text

fastlane でコマンドで配布 $ b u n d l e e x e c f a s t l a n e r u n r e g i s t e r _ d e v i c e n a m e : " アイフォー ン7 " $ b u n d l e e x e c f a s t l a n e b e t a 作業は10 秒、 待ってれば beta 版が配布されて Slack に通知がくる

Slide 10

Slide 10 text

つまりなにが便利かと言うと 今までやっていた 単純作業 が自動化される 属人性 がなく誰でも beta 配布できる 環境構築はする必要ある 手動じゃなくなるので ヒュー マンエラー を防止できる 自動化 できる

Slide 11

Slide 11 text

fastlane 概要 Ruby 製 fastlane/fastlane: The easiest way to automate building and releasing your iOS and Android apps Star 17000↑ Android もいける iOS が fastlane なら Android も fastlane に乗ってみては? // Speaker Deck 16 の標準コマンド 100 こくらいの Action 無数にある Plugin それらを組み合わせて Custom lane を作っていく

Slide 12

Slide 12 text

コマンドの説明 全部話すと日がくれるのでメインで使っているコマンドだけ

Slide 13

Slide 13 text

fastlane/scan コマンドラインでテストを楽々 実行できる。 fastlane/scan でテストを実行する ‑ Qiita

Slide 14

Slide 14 text

fastlane/pem Push 通知の証明書をコマンドで生成できる。 fastlane pem で Push 通知に必要な p12 ファイルを生成する ‑ star__hoshi's diary

Slide 15

Slide 15 text

fastlane/match Git リポジトリで証明書を管理して、 開発者が全員同じ証明書を使うこと で証明書の違いや更新失敗による消耗を防ごうぜ! ってやつ。 github に private で c e r t i f i c a t e s などのレポジトリを作成する。 UDID が追加されていた場合、 自動で証明書の更新もしてくれる。 https://codesigning.guide/ が公式文書。 日本語だと↓ の説明がわかりやすい。 fastlane match を使ったiOS 証明書、Provisioning Profile の導入管理 ‑ 百 戦錬磨 Tech ブログ

Slide 16

Slide 16 text

match nuke 証明書を削除する。 b u n d l e e x e c f a l s t l a n e m a t c h n u k e d e v e l o p m e n t と打つと、 Development のすべての証明書が削除される。 appstore に すればストア用のが消される。 と言っても証明書が消えるだけなので打っても問題ない。 「nuke したからみんな match で証明書更新しといて~」 って声かけす るだけ。 どういう時に使うかはあとで出てくる。

Slide 17

Slide 17 text

Matchfile match 実行時にオプションのデフォルト引数を定義しておける g i t _ u r l " g i t @ g i t h u b . c o m : m y - r e p o / c e r t i f i c a t e s . g i t " t y p e " d e v e l o p m e n t " a p p _ i d e n t i f i e r [ " j p . h o g e . T o d a y E x t e n s i o n " , " j p . h o g e . s t a g i n g . T o d a y E x t e n s i o n S t a g i n g " , " j p . h o g e " , " j p . h o g e . s t a g i n g " ] # Y o u r A p p l e D e v e l o p e r P o r t a l u s e r n a m e u s e r n a m e " a p p l i c a t i o n @ h o g e . j p "

Slide 18

Slide 18 text

fastlane/gym アプリのコンパイルの実施と ipa ファイルの生成を行う。

Slide 19

Slide 19 text

Gymfile c l e a n t r u e o u t p u t _ d i r e c t o r y " . / " w o r k s p a c e " h o g e . x c w o r k s p a c e " s c h e m e " S t a g i n g "

Slide 20

Slide 20 text

fastlane/cert, fastlane/sigh この2 つはどうやらセットで使うらしい。 cert は証明書のチェックをして、 sigh が証明書の取得や更新を行うらし い? ただし、 match を使っていれば cert と sigh は使う必要がないようなの であまり詳しく調べていない。

Slide 21

Slide 21 text

fastlane/deliver iTunes Connect へのアプリの提出などを行う。 Change Log や説明文なども用意しておけば ipa 提出時にそれらも入力 可能。 つまり、 説明文などが git 管理できるようになるのである。 しかし、 iTunesConnect で説明文をいじってしまうと git 配下の文章と 差分ができてしまうため、 ビミョイきがする。 今までも過去の説明文などを見たいなどはなかったので、 自分は ipa の 提出のみを実行している。

Slide 22

Slide 22 text

Deliverfile a p p _ i d e n t i f i e r " j p . h o g e " u s e r n a m e " a p p l i c a t i o n @ h o g e . j p " f o r c e f a l s e s k i p _ s c r e e n s h o t s t r u e s k i p _ m e t a d a t a t r u e s k i p _ b i n a r y _ u p l o a d f a l s e a u t o m a t i c _ r e l e a s e f a l s e

Slide 23

Slide 23 text

fastlane/produce Apple Developer Portal と iTunes Connect に新しいアプリケー ション を作成してくれる。 fastlane/produce でコマンドだけで iTunesConnect にアプリを作成す る ‑ Qiita

Slide 24

Slide 24 text

fastlane/snapshot スクリー ンショットを撮影できる。 UI Test を書く必要がある。 テストの結果をスクショ撮ったり、 AppStore に並べるための画像を用 意したりする。

Slide 25

Slide 25 text

fastlane/frameit よくある iPhone の上に文字おくみたいなのが作れる。 snapshot と組み合わせると自動でスクショが作れて便利。

Slide 26

Slide 26 text

Actions f a s t l a n e r u n A C T I O N _ N A M E で実行できる。 よく使われるけど、 標準コマンドというほどではないのが Action.

Slide 27

Slide 27 text

fastlane/crashlytics_helper.rb Fabric beta にアプリファイルを提出できる。 Gym で作ったアプリファイルを Fabric に送信する。

Slide 28

Slide 28 text

nakiostudio/xcov: Nice code coverage reporting without hassle テストカバレッジを slack に連携する。

Slide 29

Slide 29 text

nakiostudio/danger‑xcov: Danger plugin to validate the code coverage of the files changed テストカバレッジをプルリクに連携する。 Dangerfile に xcov.report を書く。 プルリクにカバレッジ情報を連携し てくれて最高。 iOS 開発での Pull Request と テストカバレッジの連携 // Speaker Deck

Slide 30

Slide 30 text

beta 版の時はアイコンを変える HazAT/badge: Add a badge to your app icon fastlane/badge.rb at master · fastlane/fastlane

Slide 31

Slide 31 text

Plugin あんまり使ってないので割愛

Slide 32

Slide 32 text

classi/fastlane‑example を読んでいく https://github.com/classi/fastlane‑example: fastlane example by Classi Corp.

Slide 33

Slide 33 text

分割してる Fastfile の import 機能を使い、 複数のプロジェクトで共通の Fastfile を 使う ‑ Qiita

Slide 34

Slide 34 text

fastlane‑example を import して使う f a s t l a n e _ v e r s i o n " 2 . 1 9 . 2 " i m p o r t _ f r o m _ g i t ( u r l : ' h t t p s : / / g i t h u b . c o m / c l a s s i / f a s t l a n e - e x a m p l e ' , p a t h : ' i O S / f a s t l a n e / F a s t f i l e ' )

Slide 35

Slide 35 text

beta 配布の lane l a n e : b e t a d o m a t c h ( t y p e : E N V [ " B E T A _ M A T C H _ T Y P E " ] , f o r c e _ f o r _ n e w _ d e v i c e s : i n c r e m e n t _ b u i l d _ n u m b e r ( b u i l d _ n u m b e r : T i m e . n o w . t o _ i . t o _ s [ b a d g e ( d a r k : t r u e ) g y m c r a s h l y t i c s ( . . . ) u p l o a d _ s y m b o l s _ t o _ c r a s h l y t i c s s l a c k ( . . . ) e n d https://github.com/classi/fastlane‑ example/blob/master/iOS/fastlane/Fastfile ※ 説明しやすいように一部抜粋

Slide 36

Slide 36 text

解説 1. match で証明書取得 or 更新 2. increment_build_number でビルド番号を変更 3. badge でアプリアイコンを加工 4. gym でコンパイル 5. crashlytics でベー タ版配布 6. upload_symbols_to_crashlytics で dSYM をアップロー ド 7. slack に通知 だいたいさっき解説したことの組み合わせ

Slide 37

Slide 37 text

ブランチごとに実行される lane を変えてる d e p l o y m e n t : m a s t e r : b r a n c h : m a s t e r c o m m a n d s : - b r e w i n s t a l l i m a g e m a g i c k - b r e w i n s t a l l g r a p h i c s m a g i c k - b u n d l e e x e c f a s t l a n e b e t a - - v e r b o s e r e l e a s e : b r a n c h : / r e l e a s e . * / c o m m a n d s : - b u n d l e e x e c f a s t l a n e r e l e a s e - - v e r b o s e https://github.com/classi/fastlane‑ example/blob/master/iOS/circle.yml

Slide 38

Slide 38 text

fastlane を捨てたいときは? 1. Automatically manage signing にチェック 2. 証明書を手動で作り直す だけ!

Slide 39

Slide 39 text

1. Automatically manage signing にチェック

Slide 40

Slide 40 text

2. 証明書を手動で作り直す match ~ で始まる証明書を全て削除して、 真心を込めて証明書を自作し ダウンロー ド、 インストー ルすればよし。

Slide 41

Slide 41 text

よく起こるエラー まずエラー が出たらちゃんと内容を読みましょう。

Slide 42

Slide 42 text

iTunes Connect の仕様が変わった この前も WWDC のタイミングで仕様が変わって Deliver がこけるよう になった。 b u n d l e u p d a t e f a s t l a n e して fastlane を最新にすればなおることが 多い。

Slide 43

Slide 43 text

Scan がこける CircleCI でシュミレー タの起動がうまくいかずテストが失敗するらし い。20 回に1 回くらい起きる。 CircleCI で rebuild すればうまくいく。 恒久対策としてはこれでいけるかも( すんません試してないっす) xcodebuild ‑ exit code 65 | CircleCI

Slide 44

Slide 44 text

match がうまくいかない ロー カル PC で環境構築する際、 b u n d l e e x e c f a s t l a n e m a t c h d e v e l o p m e n t でうまくいかなかったりする。 考えられるのは 1. github に ssh key が設定されているか? 2. ruby の version が適切か? System の ruby が 2.0.0 だと openssl 周りで死ぬ 3. match で使う certificates レポジトリに write 権限があるか? ないと証明書の更新はできても repository 管理できない

Slide 45

Slide 45 text

神に触れた match で生成した証明書を人間が真心を込めて編集してしまうと、 Apple Developer にある証明書と certificates レポジトリにある証明書 で差分が出てしまうので、 人間は証明書に触ってはいけない。 その場合は match nuke する。

Slide 46

Slide 46 text

意図せず神に触れてしまうケー ス 3. match で使う certificates レポジトリに write 権限があるか? ないと証明書の更新はできても repository 管理できない write 権限がないのに match を実行すると 1. match が証明書を更新する 2. certificates に Push するも失敗する 3. certificates と Apple Developer で差分が発生 4. 神がお怒りになる これやっちゃったらしょうがないので m a t c h n u k e 案件...。

Slide 47

Slide 47 text

前に起きた辛いエラー CircieCI の Xcode を 8.3 にしたら Gym で ARCHIVE FAILED になる解 決方法 ‑ Qiita 嫌な事件だったね...。 治るのに1 ヶ月かかった( 要領が悪かっただけというのはある)

Slide 48

Slide 48 text

おわり