ios.yml 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. name: 🍏 iOS build
  2. on:
  3. push:
  4. branches:
  5. - master
  6. release:
  7. types:
  8. - published
  9. - released
  10. pull_request:
  11. branches:
  12. - master
  13. workflow_dispatch:
  14. jobs:
  15. BuildIpa:
  16. runs-on: macOS-latest
  17. env:
  18. SDK_VERSION: '141'
  19. DEPLOYMENT_TARGET: '12.0'
  20. PLATFORM: 'OS64'
  21. QT_VERSION: '5.15.2'
  22. BUILD_TYPE: 'Release'
  23. BITCODE: 'FALSE'
  24. steps:
  25. - uses: actions/checkout@v2
  26. with:
  27. submodules: 'recursive'
  28. - uses: actions/setup-python@v2
  29. with:
  30. python-version: '3.8'
  31. - name: "🌍 Pull Translations"
  32. run: |
  33. if [[ -z "${TX_TOKEN}" ]]; then
  34. echo "TX_TOKEN not set, skip tx pull"
  35. else
  36. pip install transifex-client
  37. ./scripts/ci/pull_translations.sh
  38. fi
  39. env:
  40. TX_TOKEN: ${{ secrets.TX_TOKEN }}
  41. - name: Download artifact
  42. env:
  43. SDK_VERSION: ${{ env.SDK_VERSION }}
  44. run: |
  45. wget -O OSGeo4I-arm64.zip https://github.com/opengisch/qfield-sdk/releases/download/${SDK_VERSION}/OSGeo4I-Qt${{ env.QT_VERSION }}-arm64-${{ env.SDK_VERSION }}.zip
  46. unzip OSGeo4I-arm64.zip -d ${{ github.workspace }}
  47. - name: Cache Qt
  48. id: cache-qt
  49. uses: pat-s/always-upload-cache@v2.1.5
  50. with:
  51. path: ${{ github.workspace }}/Qt-${{ runner.os }}-${{ env.QT_VERSION }}
  52. key: ${{ runner.os }}-QtCache-${{ env.QT_VERSION }}-ios
  53. - name: ⬆️ Install Qt
  54. uses: jurplel/install-qt-action@v2
  55. with:
  56. version: ${{ env.QT_VERSION }}
  57. target: ios
  58. dir: ${{ github.workspace }}/Qt-${{ runner.os }}-${{ env.QT_VERSION }}
  59. modules: 'qtcharts'
  60. cached: ${{ steps.cache-qt.outputs.cache-hit }}
  61. - name: 🔥 Delete Qt built-in styles (QField use Material)
  62. run: |
  63. rm -rf ${Qt5_Dir}/qml/QtQuick/Controls.2/designer
  64. rm -rf ${Qt5_Dir}/qml/QtQuick/Controls.2/Fusion
  65. rm -rf ${Qt5_Dir}/qml/QtQuick/Controls.2/Imagine
  66. rm -rf ${Qt5_Dir}/qml/QtQuick/Controls.2/Universal
  67. shell: bash
  68. - uses: Apple-Actions/import-codesign-certs@v1
  69. with:
  70. p12-file-base64: ${{ secrets.IOS_CERTIFICATES_FILE_BASE64 }}
  71. p12-password: ${{ secrets.IOS_CERTIFICATES_PASSWORD }}
  72. - uses: Apple-Actions/download-provisioning-profiles@v1
  73. with:
  74. bundle-id: ch.opengis.qfield
  75. issuer-id: ${{ secrets.IOS_APPSTORE_ISSUER_ID }}
  76. api-key-id: ${{ secrets.IOS_APPSTORE_KEY_ID }}
  77. api-private-key: ${{ secrets.IOS_APPSTORE_PRIVATE_KEY }}
  78. - name: Prepare env
  79. run: |
  80. ./scripts/ci/env_gh.sh
  81. - name: 🔧 Configure
  82. run: |
  83. source ./scripts/version_number.sh
  84. source ./scripts/ci/generate-version-details.sh
  85. mkdir -p build
  86. cmake \
  87. -G "Xcode" \
  88. -DAPK_VERSION_CODE=${APK_VERSION_CODE} \
  89. -DAPP_VERSION=${APP_VERSION} \
  90. -DAPP_VERSION_STR=${APP_VERSION_STR} \
  91. -DAPP_PACKAGE_NAME=${APP_PACKAGE_NAME} \
  92. -DCMAKE_PREFIX_PATH=${{ github.workspace }}/OSGeo4I/arm64 \
  93. -DCMAKE_TOOLCHAIN_FILE=${{ github.workspace }}/OSGeo4I/cmake/ios.toolchain.cmake \
  94. -DCMAKE_BUILD_TYPE="${{ env.BUILD_TYPE }}" \
  95. -DDEPLOYMENT_TARGET=${{ env.DEPLOYMENT_TARGET }} \
  96. -DFORCE_STATIC_LIBS=TRUE \
  97. -DPLATFORM=${{ env.PLATFORM }} \
  98. -DENABLE_VISIBILITY=FALSE \
  99. -DENABLE_BITCODE=${{ env.BITCODE }} \
  100. -DENABLE_ARC=TRUE \
  101. -DQT_IOS_TEAM_ID=${{ secrets.IOS_TEAM_ID }} \
  102. -DQT_IOS_CODE_SIGN_IDENTITY=${{ secrets.IOS_CODE_SIGN_IDENTITY }} \
  103. -DQT_IOS_PROVISIONING_PROFILE_SPECIFIER=${{ secrets.IOS_PROVISIONING_PROFILE_SPECIFIER }} \
  104. -DENABLE_TESTS=OFF \
  105. -B ./build/ -S .
  106. - name: 🔨 Build qfield
  107. run: cmake --build build --target qfield --config "${{ env.BUILD_TYPE }}"
  108. - name: 🔨 Build qfield Archive
  109. run: cmake --build build --target qfieldArchive --config "${{ env.BUILD_TYPE }}"
  110. - name: 🚀 Deploy qfield Ipa
  111. run: |
  112. rm /Users/runner/work/QField/QField/build/output/bin/qfield.app
  113. cmake --build build --target qfieldIpa --config "${{ env.BUILD_TYPE }}"
  114. - name: 📦 Upload qfield App
  115. uses: actions/upload-artifact@v2
  116. with:
  117. name: qfield-${{ env.PLATFORM }}-${{ env.DEPLOYMENT_TARGET }}.app
  118. path: build/output/bin/${{ env.BUILD_TYPE }}/qfield.app
  119. - name: 📦 Upload qfield Ipa
  120. uses: actions/upload-artifact@v2
  121. with:
  122. name: qfield-i${{ env.PLATFORM }}-${{ env.DEPLOYMENT_TARGET }}.ipa
  123. path: build/src/app/qfieldIpa/qfield.ipa
  124. - uses: Apple-Actions/upload-testflight-build@v1
  125. if: github.event_name == 'release' && startsWith(github.ref, 'refs/tags/v')
  126. name: 🚀 Release to TestFlight
  127. with:
  128. app-path: build/src/app/qfieldIpa/qfield.ipa
  129. issuer-id: ${{ secrets.IOS_APPSTORE_ISSUER_ID }}
  130. api-key-id: ${{ secrets.IOS_APPSTORE_KEY_ID }}
  131. api-private-key: ${{ secrets.IOS_APPSTORE_PRIVATE_KEY }}
  132. - name: 🚀 Upload Release Asset
  133. if: github.event_name == 'release' && startsWith(github.ref, 'refs/tags/v')
  134. uses: actions/upload-release-asset@v1
  135. env:
  136. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  137. with:
  138. upload_url: ${{ github.event.release.upload_url }}
  139. asset_path: build/src/app/qfieldIpa/qfield.ipa
  140. asset_name: qfield-i${{ env.PLATFORM }}-${{ env.DEPLOYMENT_TARGET }}.ipa
  141. asset_content_type: application/zip