Upgrade to Pro — share decks privately, control downloads, hide ads and more …

fastlane 勉強会

fastlane 勉強会

fastlane/fastlane: 🚀 The easiest way to automate building and releasing your iOS and Android apps
https://github.com/fastlane/fastlane

classi/fastlane-example: fastlane example by Classi Corp.
https://github.com/classi/fastlane-example

iOS が fastlane なら Android も fastlane に乗ってみては?
https://speakerdeck.com/starhoshi/ios-ga-fastlane-nara-android-mo-fastlane-nicheng-tutemiteha

fastlane/scan でテストを実行する - Qiita
http://qiita.com/star__hoshi/items/f7e3ec8db107b0be69f7

fastlane pem で Push 通知に必要な p12 ファイルを生成する - star__hoshi's diary
http://starhoshi.hatenablog.com/entry/2017/07/26/fastlane_pem_%E3%81%A7_Push_%E9%80%9A%E7%9F%A5%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA_p12_%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B

fastlane matchを使ったiOS証明書、Provisioning Profileの導入管理 - 百戦錬磨 Techブログ
http://tech.hyakuren.org/entry/ios-provisioning-use-fastlane-match

fastlane/produce でコマンドだけで iTunesConnect にアプリを作成する - Qiita
http://qiita.com/star__hoshi/items/a40b3dd54991e8c6b3a4

iOS 開発での Pull Request と テストカバレッジの連携
https://speakerdeck.com/starhoshi/ios-kai-fa-defalse-pull-request-to-tesutokabaretuzifalselian-xi

classi/fastlane-example: fastlane example by Classi Corp.
https://github.com/classi/fastlane-example/

Fastfile の import 機能を使い、複数のプロジェクトで共通の Fastfile を使う - Qiita
http://qiita.com/star__hoshi/items/7b7d367cb0e0cab612cf

CircieCI の Xcode を 8.3 にしたら Gym で ARCHIVE FAILED になる解決方法 - Qiita
http://qiita.com/star__hoshi/items/a57608258e2598fa7d25

star__hoshi

July 31, 2017
Tweet

More Decks by star__hoshi

Other Decks in Technology

Transcript

  1. 社内 fastlane
    勉強会

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  6. 真心を込めて手動で配布
    1. Apple Developer
    を開く
    2.
    大抵ログインが切れてるのでログインし直す
    3. Devices
    に UDID
    登録
    4.
    証明書を更新してダウンロー

    5.
    ダウンロー
    ドした証明書をダブルクリックしてインストー

    6. Xcode
    を開いて証明書を確認してみる
    7.
    証明書が古いままになってるのに気がつく
    8. Xcode
    の Accounts
    から証明書一覧を見て Data Created
    が古いの
    を消す

    View Slide

  7. 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
    でみんなに通知

    View Slide

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

    View Slide

  9. 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
    に通知がくる

    View Slide

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

    View Slide

  11. 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
    を作っていく

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  15. 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
    ブログ

    View Slide

  16. 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
    で証明書更新しといて~」
    って声かけす
    るだけ。
    どういう時に使うかはあとで出てくる。

    View Slide

  17. 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
    "

    View Slide

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

    View Slide

  19. 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
    "

    View Slide

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

    View Slide

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

    提出のみを実行している。

    View Slide

  22. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    使う ‑ Qiita

    View Slide

  34. 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
    '
    )

    View Slide

  35. 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

    説明しやすいように一部抜粋

    View Slide

  36. 解説
    1. match
    で証明書取得 or
    更新
    2. increment_build_number
    でビルド番号を変更
    3. badge
    でアプリアイコンを加工
    4. gym
    でコンパイル
    5. crashlytics
    でベー
    タ版配布
    6. upload_symbols_to_crashlytics
    で dSYM
    をアップロー

    7. slack
    に通知
    だいたいさっき解説したことの組み合わせ

    View Slide

  37. ブランチごとに実行される 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

    View Slide

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

    View Slide

  39. 1. Automatically manage signing
    にチェック

    View Slide

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

    View Slide

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

    View Slide

  42. 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
    を最新にすればなおることが
    多い。

    View Slide

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

    View Slide

  44. 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
    管理できない

    View Slide

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

    View Slide

  46. 意図せず神に触れてしまうケー

    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
    案件...。

    View Slide

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

    View Slide

  48. おわり

    View Slide