iOS 앱 출시 흐름 자동화 도구 fastlane 배포

10330 단어 XcodeSwiftObjective-C

배경



slack이나 deploygate, circleci에 의식을 돌려와 관련하여 잘 듣는 fastlane.
이름은 알고 있지만, 지금 일어나 무엇을 해줄지 잘 모르기 때문에 만지면서 위해 해보기로 했습니다.

작업의 목표로서,
  • XC 테스트 실행을 fastlane 명령에서 두드리기
  • IPA 파일을 만들고 배포 게이트에 업로드 할 수 있습니다

  • 이러한 목표는 그 자체로 보면 상당한 효율성으로 보이지 않을 수도 있지만, circleci와 slack을 결합하여 상당한 효율성을 기대할 수 있다고 생각합니다.
    그들에 대해서는 나중에 추가할 예정입니다.

    공식 가이드



    설치



    전제



    Mac OS 10.9 or newer
    Ruby 2.0 or newer (ruby -v)
    Xcode

    작업



    fastline 설치
    sudo gem install fastlane --verbose
    

    Xcode 명령 줄 도구의 최신 버전 설치
    ※ 최신이 아닌 경우
    xcode-select --install
    

    위 명령을 터미널에서 입력하면 팝업이 표시되므로 "설치"를 클릭하십시오.



    fastlane을 실행하는 데 시간이 오래 걸리는 경우 다음 명령
    gem cleanup
    

    설정


  • 먼저 자신의 프로젝트 파일로 cd로 이동
  • 터미널에서 다음 명령 입력
  • fastlane init
    

    실행하면 다음을 듣기 때문에 입력
    Your Apple ID (e.g. [email protected]): 
    

    → 자신의 AppleID 입력
    Password (for [email protected]): 
    

    →appleID 비밀번호 입력
    Multiple teams found, please enter the number of the team you want to use: 
    1) XXXXXXXXXX "Takashi Kudo" (Individual)
    2) XXXXXXXXXX "hoge, Inc." (Company/Organization)
    

    →AppleID가 복수의 계정에 붙어 있는 경우는 적절한 쪽을 선택 ※이번은 1
    
    +----------------+--------------------------------------------------------------------------+
    |                                      Detected Values                                      |
    +----------------+--------------------------------------------------------------------------+
    | Apple ID       | [email protected]                                                       |
    | App Name       | SampleProject20160205                                                    |
    | App Identifier | tokyo.swift.SampleProject20160205                                        |
    | Project        | /Users/tac/Desktop/SampleProject20160205/SampleProject20160205.xcodeproj |
    +----------------+--------------------------------------------------------------------------+
    
    [14:35:35]: This app identifier doesn't exist on iTunes Connect yet, it will be created for you
    [14:35:35]: This app identifier doesn't exist on the Apple Developer Portal yet, it will be created for you
    Please confirm the above values (y/n)
    

    →itune Connect등의 설정이 되어 있지 않은 경우는, 자동으로 설정해 주기 때문에 이것을 받을 수 있을지 어떨지를 선택. yes를 선택해 봅니다.

    ※ no를 선택하면 App Idendifier를 듣기 때문에 수동으로 입력합니다.
    [14:36:25]: Created new file './fastlane/Appfile'. Edit it to manage your preferred app metadata information.
    [14:36:25]: Creating the app on iTunes Connect and the Apple Developer Portal
    
    +----------------+-----------------------------------+
    |             Summary for produce 1.1.1              |
    +----------------+-----------------------------------+
    | username       | [email protected]                 |
    | app_identifier | tokyo.swift.SampleProject20160205 |
    | app_name       | SampleProject20160205             |
    | sku            | 1454650585                        |
    | language       | English                           |
    | skip_itc       | false                             |
    | skip_devcenter | false                             |
    | team_id        | 3XL44PTR2S                        |
    +----------------+-----------------------------------+
    
    [14:36:28]: Creating new app 'SampleProject20160205' on the Apple Dev Center
    [14:36:29]: Created app 336BGKV7DM
    [14:36:29]: Finished creating new app 'SampleProject20160205' on the Dev Center
    [14:36:31]: Creating new app 'SampleProject20160205' on iTunes Connect
    [14:36:33]: Successfully created new app 'SampleProject20160205' on iTunes Connect with ID 1081728442
    [14:36:33]: Loading up 'deliver', this might take a few seconds
    [14:36:33]: Login to iTunes Connect ([email protected])
    [14:36:35]: Login successful
    
    +--------------------+-----------------------------------+
    |                 deliver 1.9.0 Summary                  |
    +--------------------+-----------------------------------+
    | username           | [email protected]                |
    | app_identifier     | tokyo.swift.SampleProject20160205 |
    | metadata_path      | ./fastlane/metadata               |
    | screenshots_path   | ./fastlane/screenshots            |
    | skip_binary_upload | false                             |
    | skip_screenshots   | false                             |
    | skip_metadata      | false                             |
    | force              | false                             |
    | submit_for_review  | false                             |
    | automatic_release  | false                             |
    +--------------------+-----------------------------------+
    
    [14:36:36]: Writing to 'fastlane/metadata/en-US/description.txt'
    [14:36:36]: Writing to 'fastlane/metadata/en-US/keywords.txt'
    [14:36:36]: Writing to 'fastlane/metadata/en-US/release_notes.txt'
    [14:36:36]: Writing to 'fastlane/metadata/en-US/support_url.txt'
    [14:36:36]: Writing to 'fastlane/metadata/en-US/marketing_url.txt'
    [14:36:36]: Writing to 'fastlane/metadata/en-US/name.txt'
    [14:36:36]: Writing to 'fastlane/metadata/en-US/privacy_url.txt'
    [14:36:36]: Writing to 'fastlane/metadata/copyright.txt'
    [14:36:36]: Writing to 'fastlane/metadata/primary_category.txt'
    [14:36:36]: Writing to 'fastlane/metadata/secondary_category.txt'
    [14:36:36]: Writing to 'fastlane/metadata/primary_first_sub_category.txt'
    [14:36:36]: Writing to 'fastlane/metadata/primary_second_sub_category.txt'
    [14:36:36]: Writing to 'fastlane/metadata/secondary_first_sub_category.txt'
    [14:36:36]: Writing to 'fastlane/metadata/secondary_second_sub_category.txt'
    Successfully created new configuration files.
    [14:36:36]: Downloading all existing screenshots...
    [14:36:37]: Successfully downloaded all existing screenshots
    [14:36:37]: Successfully created new Deliverfile at path 'fastlane/Deliverfile'
    [14:36:37]: xcrun xcodebuild -list -project './SampleProject20160205.xcodeproj'
    [14:36:37]: 'snapshot' not enabled.
    [14:36:37]: 'cocoapods' not enabled.
    [14:36:37]: 'carthage' not enabled.
    [14:36:37]: Created new file './fastlane/Fastfile'. Edit it to manage your own deployment lanes.
    [14:36:37]: fastlane will send the number of errors for each action to
    [14:36:37]: https://github.com/fastlane/enhancer to detect integration issues
    [14:36:37]: No sensitive/private information will be uploaded
    [14:36:37]: You can disable this by adding `opt_out_usage` to your Fastfile
    [14:36:37]: Successfully finished setting up fastlane
    
    

    설치 완료!

    실행



    다음 항목은 구체적으로는 Fastfile에 처리를 작성한 다음 line으로 정의한 명령을 두드리는 것으로 실행됩니다.

    XCTest 자동화


  • Fastfile에 쓰는 내용 (간이판)
  •  desc "XCTestのを実行します。"
        lane :test do
          xctest(
            scheme: "SampleProject2016020_2",
            destination: "platform=iOS Simulator,name=iPhone 5s,OS=9.2",
          )
      end
    
  • 명령
  • fastlane test
    

    프로젝트 폴더 > fastlane > test_output > report.html을 클릭하면 이런 식으로 XCTest 실행 결과가 표시됩니다.



    보다 자세히 설명하는 예
      # Run tests in given simulator
      xctest(
        destination: "name=iPhone 5s,OS=8.1",
        destination_timeout: 120, # increase device/simulator timeout, usually used on slow CI boxes
        reports: [{
          report: 'html',
          output: './build-dir/test-report.html',  # will use XCODE_BUILD_PATH/report, if output is not provided
          screenshots: 1
        },
        {
          report: 'junit',
          output: './build-dir/test-report.xml'
        }]
      )
    

    IPA 파일을 만들고 배포 게이트에 업로드



    DeployGate API 정보는 여기

    만약을 위해서입니다만, 이하라면 실패합니다.
  • Fastfile에 쓰는 내용 (실패판)
  • desc "社内向け配信"
       lane :for_inhouse do
        sigh(
          adhoc: true
        )
        ipa(
          scheme: 'SampleProject2016020_2',
          configuration: 'Debug'
        )
        deploygate(
          user: 'hogehoge',
          api_token: 'hogehoge'
        )
      end
    
    
    [18:24:58]: A build error occured. You are using legacy `shenzhen` for building
    [18:24:58]: it is recommended to upgrade to `gym`: 
    [18:24:58]: https://github.com/fastlane/gym
    [18:24:58]: krausefx-ipa build -s "SampleProject2016020_2" -c "AdHoc" -m "/Users/tac/Desktop/SampleProject2016020_2/AdHoc_tokyo.swift.SampleProject2016020-2.mobileprovision" --verbose | xcpretty
    [18:24:58]: -------------------------------------------------------
    [18:24:58]: Variable Dump:
    [18:24:58]: {:DEFAULT_PLATFORM=>:i
    

    위의 ipa 명령은 shenzhen을 빌드에 사용하고 있지만, 작동하지 않기 때문에,
    htps : // 기주 b. 코 m / 후 st ぁ네 / gym
    에서 gym 설치
    sudo gem install gym
    

    방금 전을 ipa에서 gym으로 변경
  • Fastfile에 쓰는 내용 (간이판)
  • desc "社内向け配信"
       lane :for_inhouse do
        sigh(
          adhoc: true
        )
        ipa(
          scheme: 'SampleProject2016020_2',
          configuration: 'Debug'
        )
        deploygate(
          user: 'hogehoge',
          api_token: 'hogehoge'
        )
      end
    

    그러면 deploygate로 ipa 파일이 업데이트됩니다.
    덧붙여서, api_token은 deploygate 사이트에 로그인하여 확인할 수 있습니다.

    fastlane 설정tips



    여기에 fastlane의 액션으로서 Fastfile에 쓰는 내용은 정리되어 있습니다.

    참고문헌

    좋은 웹페이지 즐겨찾기