[Flutter] iOS를 위한 GiitHub Actions 자동 설계

2021/01/017 추기: 안드로이드 버전도 썼어요!

추기

  • 2021/01/22
    코드가 틀려서 수정했어요.
    그리고 구문 이름은 github입니다.actios_나는 Sample과 타자를 치는 것을 알아차렸다.이거 프로젝트 하다가 실수한 것 같은데.
  • 개시하다


    Flutter build iOS로 Xcode archive로 다시 App Store Connect에 업로드...이런 일은 매우 번거롭다.GiitHub Actions를 사용하면 push 등을 트리거로 삼아 이 번거로운 작업을 자동화할 수 있다.그리고 공공 창고를 무료로 이용할 수 있다고 한다.이거 할 수밖에 없어요.
    이미 주변 지식이 있는 사람을 위해main.일단 Yml부터.
    다양한 설정을 할 수 있지만 이를 단순한 형식으로 귀결시키려 애쓴다.
    main.yml
    name: CI
    
    on:
    main branch
      push:
        branches: [ main ]
    
    jobs:
      #
      # Build for iOS
      #
      build_iOS: # jobに名前をつけられる
    
        name: Build for iOS # GitHubに表示されるジョブの名前
        runs-on: macos-latest # ジョブを実行するマシーンの種類
    
        steps: #一連のタスク
    
          # チェックアウト
          - name: Checks-out my repository # step に名前をつけられる なくてもいい
            uses: actions/checkout@v2
    
          # Flutter のインストール
          - name: Install Flutter
            run: git clone https://github.com/flutter/flutter.git # ターミナルでこれが実行されるイメージ
    
          # PATH を通す
          - name: Add path
            run: echo "$(pwd)/flutter/bin" >> $GITHUB_PATH # GITHUB_PATH にどんどんぶちこめばいいらしい
    
          # パッケージのダウンロード
          - name: Download Flutter packages
            run: flutter pub get
    
          # 証明書の生成
          - name: Import Provisioning Profile
            run: | # 複数行の run を書きたい場合はこうする 以下、Provisioning Profilesを置くべきディレクトリにデコードしている
              mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
              echo -n ${{ secrets.PROVISIONING_PROFILE }} | base64 -d > ~/Library/MobileDevice/Provisioning\ Profiles/distribution.mobileprovision
    
          # 署名をする
          - name: Import Code-Signing Certificates
            uses: Apple-Actions/import-codesign-certs@v1 # 外部パッケージを使っている
            with:
              p12-file-base64: ${{ secrets.CERTIFICATES_P12 }}
              p12-password: ${{ secrets.CERTIFICATE_PASSWORD }}
    
          # ipa ファイルの出力
          - name: Create ipa file
            # GITHUB_RUN_NUMBER をビルドナンバーに指定することで被りがないようにしている。
            run: flutter build ipa --export-options-plist=ExportOptions.plist --build-number ${GITHUB_RUN_NUMBER}
    
          # AppStoreConnect にアップロードする
          - name: Upload to AppStoreConnect
            run: xcrun altool --upload-app -f "./build/ios/ipa/github_actios_sample.ipa" -u "${{ secrets.APPLE_ID }}" -p "${{ secrets.APPLE_APP_PASS }}"
    
    
    이어서 나는 가능한 한 그다지 상세하지 않은 사람에게 상세하게 설명하고 싶다.

    먼저 프로젝트를 해보도록 하겠습니다.


    시험을 보려면 빌딩 시간을 절약하고 싶어요.
    그래서 플루터로 새로운 프로젝트를 만들고 GiitHub로 직접 밀어붙인다.
    이번 작업은 아래의 창고입니다.
    https://github.com/kenta-wakasa/github_actions_sample

    미리 필요한 물건


    필요한 게 몇 개 있으니까 그런 거 준비해.
  • 애플 ID 및 App 비밀번호
  • Identifiers
  • Centeficates,p12,비밀번호
  • Provisioning profile
  • 새로운 App 페이지
  • 애플 ID 및 App 비밀번호


    물론 먼저 개발상들을 등록해야 한다.
    이곳은 역시 사랑을 끊는 곳이다.
    만약 그걸 했다면 다음엔 앱용 비밀번호를 받게 될 거야.
    다음 페이지는 참조가 됩니다.
    https://support.apple.com/ja-jp/HT204397
    App Store Connect에 업로드할 때 이 앱 비밀번호가 필요합니다.

    Identifiers


    묶음 ID 등으로 불리는 물건.
    https://developer.apple.com/account/resources/identifiers/list
    여기서 만들어요.다양한 설치 방법이 있지만 독특하면 문제없습니다.

    서버tificates,p12 및 비밀번호


    나는 이 페이지가 매우 쉽게 이해할 수 있다고 생각한다.
    https://i-app-tec.com/ios/apply-application.html
    이번에는 Apple Distribution을 선택했습니다.

    완성되면 이거 주세요.문서로 쓰다.
    프로그램 검색에서 k를 입력하면 열쇠사슬 접근을 찾을 수 있기 때문에 이것을 엽니다.

    이렇게 써도 돼요.
    암호가 요구되기 때문에 임의의 물건을 입력하고 제어한다.
    시작 내용을 모르면 이 페이지를 참고하세요.
    https://mmorley.hatenablog.com/entry/2015/09/07/131745

    Provisioning profile


    여기서 추가 가능합니다.
    https://developer.apple.com/account/resources/profiles/add
    이번에는 앱스토어를 선택했다.
    파일 이름은 distribution입니다.모바일 프로비저닝으로

    새 App 페이지


    여기서 추가 가능합니다.
    방금 만든 Identifiers를 선택합니다.
    https://appstoreconnect.apple.com/apps

    준비 오케이.


    오랜 시간이었지만 미리 준비를 마쳤다.
    다음은 Xcode 설정입니다.

    Xcode를 통한 다양한 설정


    우선 [프로젝트의 path]/ios/Runner입니다.xcworkspace를 엽니다.
    이 화면에서 방금 설정한 Identifiers 또는 Provisioning 소개를 지정합니다.

    이 정도만 하면 될 것 같아서요.
    Flutter의 공식에 상세한 기록이 있다.
    https://flutter.dev/docs/deployment/ios

    ExportOptions.만들다


    Xcode로 파일을 한 번 저장하면 ExportOptions를 다운로드할 수 있습니다.안에 plist가 있어요.ipa 파일을 만들 때 필요하기 때문에 미리 구할 수 있습니다.
    자신의 상황은 이렇다.
    만약 평론한 부분을 고쳐 쓰면 아마도 직접 사용할 수 있을 것이다.
    ExportOptions.plist
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    	<key>destination</key>
    	<string>export</string>
    	<key>method</key>
    	<string>app-store</string>                // <- 出力方式
    	<key>provisioningProfiles</key>
    	<dict>
    		<key>github.actions.sample</key>  // <- バンドルID
    		<string>distribution</string>     // <- Provisioning profile
    	</dict>
    	<key>signingCertificate</key>
    	<string>Apple Distribution</string>
    	<key>signingStyle</key>
    	<string>manual</string>
    	<key>stripSwiftSymbols</key>
    	<true/>
    	<key>teamID</key>
    	<string>42XYZEWKER</string>              // <- チームID
    	<key>uploadBitcode</key>
    	<false/>
    	<key>uploadSymbols</key>
    	<true/>
    </dict>
    </plist>
    
    나는 이 파일을 프로젝트의 루트에 설정했다.

    VScode에 확장 기능 추가


    GiitHub Actions를 쉽게 터치할 수 있는 확장 기능이 있으므로 설치합니다.
    https://marketplace.visualstudio.com/items?itemName=cschleiden.vscode-github-actions

    Secrets 를 입력하십시오.


    GiitHub Actions에서는 Secrets에 비공개 정보를 미리 저장할 수 있습니다.
    이번엔 다음 설정.
  • APPLE_APP_PASS(App용 비밀번호)
  • APPLE_ID (Apple ID)
  • CERTIFICATES_P12(p12 파일)
  • CERTIFICATE_PASSWORD(p12 파일의 암호)
  • PROVISIONING_PROFILE (Provisioning profile)
  • VScode는 방금 설치한 확장 기능을 사용하여 간단히 설정할 수도 있습니다.

    Repository Secrets 옆에 있는 + 아이콘을 클릭하면 계속 추가할 수 있습니다.
    근데 여기 문제가 하나 있어요.
    문자열은 직접 입력할 수 있지만 CERTIFCATESP12 및 PROVISIONIN프로일 어떡해?
    기본 64로 변환하여 해결할 수 있습니다.
    터미널 열기
    command
    % base64 [変換したいファイル名] | tr -d  "\n" | pbcopy
    
    , 클립보드에 저장됩니다.
    그리고 그것을 cmd+v로 붙이면 됩니다.
    참고로tr-d "\n"에서 줄 바꿈을 삭제했습니다.

    드디어 Action 워크플로우 작성


    편집된 파일은 [root]/입니다.github/workflows/main.여기에 명령을 쓰면 원격 맥 환경에서 실행할 수 있습니다.
    이 파일 자체는 기릿허브의 액션 탭 등에서도 제작할 수 있다.

    이 지경이 되면 복사하고 붙이는 것도 움직일 것 같습니다.
  • distribution.mobileprovision
  • ./build/ios/ipa/github_actios_sample.ipa
  • 이 두 파일의 이름을 각각 자신의 이름으로 바꾸기를 바란다.
    이것도 하드코드가 필요 없고 기존의 창고 정보에서 끌어낼 수 있으니 다음 학습 절차로 시도해 봅시다.
    가능한 한 간단하게 썼기 때문에 해설할 곳이 없다.
    내가 알 수 없는 지령은 그 지령명으로 조사하면 나올 거야.
    그래서 나는 두 가지를 집중해서 보충을 설명할 것이다.
    flutter build ipa
    
    모노의 글을 참고한 것이다.
    https://medium.com/flutter-jp/ipa-e176de0276c6
    ippa 파일을 만드는 것은 매우 번거롭지만, 이 지령을 두드리기만 하면 실현할 수 있다.
    xcrun altool --upload-app
    
    업로드는 이것뿐입니다.
    나는 이 보도를 참고했다.
    https://qiita.com/messhi/items/cb8c6f2b4b6540995189


    업로드에 성공하면 테스트 항공편에서 바로 다운로드할 수 있다.
    하지만 수출 규제 등이 없다는 말을 듣고 앱이 암호화를 사용하지 않았다고 답하지 않으면 TestFlight 등으로 낮출 수 없다.
    info.plist
    info.plist
      <key>ITSAppUsesNonExemptEncryption</key>
      <false/>
    
    추가는 OK.
    이렇게 하면 아무런 설정 없이 프로그램을 잃어버릴 수 있다.
    나는 이 보도를 참고했다.
    https://tommy10344.hatenablog.com/entry/2020/04/29/025809

    최후


    만약 이해하지 못하는 점, 잘못된 점이 있다면, 가볍게 평론할 수 있다면 나는 매우 기쁠 것이다.
    다음은 안드로이드에 쓰고 싶습니다.

    참고 문장


    https://www.mum-meblog.com/entry/research-detail/flutter-ios-ci-cd

    좋은 웹페이지 즐겨찾기