iOS : Intégration CI/CD via FastLane et Firebase à l’aide de Gitlab : Partie – 2

Dans le première partie du blognous avons couvert la configuration/installation de Fastlane avec plusieurs fichiers comme Appfile, Gymfile et Fastfile. Nous passons maintenant à la partie suivante de cette série où nous utiliserons le workflow CI/CD via Fastlane et Firebase sur la machine locale.
Nous utiliserons la prochaine étape de l’approche Code Signing via le correspondre à l’importation commande. Cela créera un référentiel séparé et téléchargera vos clés privées et certificats dans un dépôt Gitlab pour les synchroniser sur les machines. Cette approche est sécurisé.
Approche de signature de code : Utiliser Fastlane correspondre
La notion de correspondre la commande est décrite dans le guide de conception de code.
Importer : préparer les certificats à l’aide de Match (configuration unique)
Pour importer et chiffrer un certificat (.cer)la clé privée (.p12), et les profils d’approvisionnement (.mobileprovision ou .provisionprofile) dans le correspondre exécution du dépôt :
$ fastlane match import
Vous serez invité à fournir le certificat (.cer), la clé privée (.p12) et les profils de provisionnement (.mobileprovision ou .provisionprofile) chemins. correspondre validera d’abord le certificat (.cer) sur le portail de développeur avant d’importer le certificat, la clé privée et les profils de provisionnement dans le correspondre dépôt.
Cependant, s’il n’y a pas d’accès au portail des développeurs mais que des certificats, des clés privées et des profils sont fournis, vous pouvez utiliser le skip_certificate_matching possibilité de dire correspondre de ne pas vérifier les certificats. Comme ça:
$ fastlane match import --skip_certificate_matching true
Le type par défaut est ‘développement‘. Nous devons donc spécifier explicitement le type.
$ fastlane match import --type enterprise --skip_certificate_matching true
Cette étape ignorera la connexion au portail des développeurs Apple et importera le certificat, la clé privée et le profil fournis directement dans le dépôt Gitlab des certificats.
Nous devons être prudents lorsque nous utilisons cette option et nous assurer que les certificats et les profils correspondent au type (développement, adhoc, appstore, entreprise, développeur_id) et ne sont pas révoqués ou expirés.
4. Fichier de correspondance- Veuillez suivre les étapes lors de l’initialisation du correspondre commande avec les options demandées.
Étape 1. Initialisez Match dans votre projet iOS en exécutant la commande lancement du match sur la voie rapide dans le répertoire racine de votre projet.
Étape 2. Fastlane Match prend en charge plusieurs modes de stockage et vous demandera de sélectionner celui que vous souhaitez utiliser comme options 1, 2, etc. Dans ce blog, nous avons sélectionné l’option 1 qui est ‘git‘.
Étape 3. Le système vous demandera l’URL du Git Repo tpuis entrez le URL GIT-CETIFICATE VIDE (elle est ajoutée sur les nouveaux prérequis pour fournir un référentiel partagé séparé).
Maintenant, le fichier Match sera créé sur votre répertoire racine.
git_url("EMPTY GIT-CETIFICATE Repoistory")
storage_mode("git")
type("enterprise") # The default type, can be: appstore, adhoc, enterprise or development
ENV["MATCH_PASSWORD"] = "MATCH_PASSWORD"
Configurer les actions Fastfile- Dans les actions Fastlfile, nous configurerons toutes les actions telles que les variables personnalisées et les voies pour exécuter l’ensemble des tâches de manière séquentielle.
Ajoutez le script ci-dessous sur le fichier Fastlane-
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
# https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
# https://docs.fastlane.tools/plugins/available-plugins
#
# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane
#Variables
APP_BUNDLE_ID = "com.test.iOS"
#APP_BUNDLE_ID_NSE = "com.test.iOS.Todo_ios-NSE"
#APP_BUNDLE_ID_NCE = "com.test.iOS.Todo_ios-NCE"
APP_PROVISION_TITLE = "AdhocDistribution"
#APP_PROVISION_TITLE_NSE = "Todo_ios Adhoc NSE"
#APP_PROVISION_TITLE_NCE = "Todo_ios Adhoc NCE"
#App Method support list
#["app-store", "validation", "ad-hoc", "package", "enterprise", "development", "developer-id", "mac-application"]
APP_METHOD = "enterprise"
# The default type, can be: appstore, adhoc, enterprise or development
MATCH_METHOD = "enterprise"
PROJECT_SCHEMA_QA = 'Todo_ios'
PROJECT_WORKSPACE = 'Todo_ios.xcworkspace'
PROJECT_XCODEPROJ = 'Todo_ios.xcodeproj'
IPA_FILE_NAME = "Todo_ios"
BUILD_PATH = "./builds"
INCLUDE_BITCODE = false
INCLUDE_SYMBOLS = false
FIREBASE_APP_ID = "FIREBASE_APP_ID"# i.e, "1:58453............"
TESTER_LIST = "test@gmail.com" # Add with coma separated
RELEASE_NOTES_FILE_PATH = "./fastlane/release-notes.txt"
MY_TEAM = "MY_TEAM" # i.e, "RT......"
GIT_URL_CERTIFICATES = "GIT_URL_CERTIFICATES"# i.e, "https:........./todo_ios_certificate"
#Fetch values from environmental variables
username = ENV['USERNAME']
personal_github_access_token = "PERSONAL_GITHUB_ACCESS_TOKEN" # i.e, "gl.........."
authorization_token_str = "#{username}:#{personal_github_access_token}"
basic_authorization_token = Base64.strict_encode64(authorization_token_str)
#Key chain passcode of MacOS machine
KEYCHAIN_PASSWORD = "KEYCHAIN_PASSWORD" # i.e, "Raj........."
default_platform(:ios)
platform :ios do
desc "Sync certificates"
lane :sync_certificates do
#read-only disables match from overriding the existing certificates.
match(type: MATCH_METHOD,
app_identifier: APP_BUNDLE_ID,
git_url: GIT_URL_CERTIFICATES,
git_basic_authorization: basic_authorization_token,
keychain_password: KEYCHAIN_PASSWORD,
readonly: true,
skip_certificate_matching: true,
verbose: true)
end
desc "Update project provisioning"
lane :update_provisioning do
CERTIFICATE_NAME = ENV["sigh_#{APP_BUNDLE_ID}_#{MATCH_METHOD}_certificate-name"]
APP_PROVISION_PROFILE_PATH = ENV["sigh_#{APP_BUNDLE_ID}_#{MATCH_METHOD}_profile-path"]
update_project_provisioning(
xcodeproj: PROJECT_XCODEPROJ,
profile: APP_PROVISION_PROFILE_PATH,
build_configuration: "QA",
code_signing_identity: CERTIFICATE_NAME
)
end
desc "Disable automatic code signing"
lane :disable_auto_code_sign do
# more advanced manual code signing
update_code_signing_settings(
use_automatic_signing: false,
path: "./#{PROJECT_XCODEPROJ}",
team_id: MY_TEAM,
bundle_identifier: APP_BUNDLE_ID,
code_sign_identity: "",
profile_name: ""
)
end
desc "QA Build"
lane :qa_build do
APP_PROVISION_PROFILE_NAME = ENV["sigh_#{APP_BUNDLE_ID}_#{MATCH_METHOD}_profile-name"]
#EXPORT_TEAM_ID = ENV["sigh_#{APP_BUNDLE_ID}_#{MATCH_METHOD}_team-id"]
gym(scheme: PROJECT_SCHEMA_QA,
workspace: PROJECT_WORKSPACE,
clean: true,
silent: false,
include_bitcode: INCLUDE_BITCODE,
include_symbols: INCLUDE_SYMBOLS,
xcargs: {
BUNDLE_IDENTIFIER: APP_BUNDLE_ID,
#PROVISIONING_PROFILE_SPECIFIER: APP_PROVISION_PROFILE_NAME,
DEVELOPMENT_TEAM: MY_TEAM,
CODE_SIGN_STYLE: "Manual"
},
export_xcargs: "-allowProvisioningUpdates",
skip_profile_detection: true,
export_options: {
method: APP_METHOD,
provisioningProfiles: {
APP_BUNDLE_ID => APP_PROVISION_TITLE,
}
},
configuration: 'Release',
output_name: IPA_FILE_NAME,
output_directory:BUILD_PATH,
skip_codesigning: false,
#export_team_id: EXPORT_TEAM_ID,
verbose: true)
end
desc "Increament build version"
lane :increment_version do
LATEST_VERSION = 0
latest_release = firebase_app_distribution_get_latest_release(
app: FIREBASE_APP_ID
)
if latest_release != nil
LATEST_VERSION = latest_release[:buildVersion].to_i
end
increment_build_number({ build_number: LATEST_VERSION + 1 })
end
desc "clean"
lane :clean do
clear_derived_data(derived_data_path: BUILD_PATH)
end
desc "Create ipa"
lane :build do
#clean derived data for path
clean
# Disable automatic code signing
#disable_auto_code_sign
#match certificate & profile
sync_certificates
#update project provisioning
#update_provisioning
# Creates a signed file
qa_build
end
end
Remarque : Veuillez mettre à jour vos propres détails dans le script ci-dessus, c’est-à-dire.
APP_BUNDLE_ID,
APP_PROVISION_TITLE,
FIREBASE_APP_ID,
TESTER_LIST,
MON_ÉQUIPE,
GIT_URL_CERTIFICATES,
PERSONAL_GITHUB_ACCESS_TOKEN,
KEYCHAIN_PASSWORD.
Maintenant, cours construction ios fastlane commande,
Résultat:- La commande ci-dessus générera le fichier .ipa en utilisant la configuration de configuration ci-dessus avec le résumé Fastlane.
Dépannage : –
- Validez les identifiants de bundle sur FastFile.
- Vérifiez que les noms de schéma et de projet sont corrects.
- Assurez-vous d’avoir désactivé la connexion automatique et d’ajouter manuellement des profils.
- Assurez-vous que votre projet iOS est correctement configuré localement sur Xcode et que vous pouvez l’archiver et l’exporter vers l’App Store en désactivant la signature automatique.
Ensuite, vous devez configurer le plugin Firebase App Distribution. Cet outil vous permet de télécharger sur Firebase depuis Fastlane avec une action. Depuis le terminal, exécutez la commande suivante pour ajouter le plugin App Distribution à votre installation Fastlane :
$ fastlane add_plugin firebase_app_distribution
Si, pour une raison quelconque, les plugins ne sont pas installés, réessayez après avoir désactivé le VPN.
L’étape suivante consiste à vous connecter à Firebase. Suivez les étapes mentionnées sur le site Web.
https://firebase.google.com/docs/cli
Ouvrez maintenant Fastfile dans un éditeur de texte et collez le code sous la voie Fastlane :
desc "Upload build to Firebase"
lane :upload_build_to_firebase do
firebase_app_distribution(
ipa_path: "#{BUILD_PATH}/#{IPA_FILE_NAME}.ipa",
app: FIREBASE_APP_ID, testers: TESTER_LIST,
#groups: "",
#release_notes_file: RELEASE_NOTES_FILE_PATH,
release_notes: "Testing build upload")
end
Ajoutez également le code sous la voie rapide construire voie
desc "Create ipa"
............
......
# Increases the build number by 1
#increment_version
# Creates a signed file
qa_build
# Build upload to firebase
upload_build_to_firebase
end
Après toutes ces configurations, exécutez la commande suivante depuis Terminal : construction iOS fastlane.
Résultat:- Cela générera le fichier .ipa et le téléchargera sur Firebase App Distribution sur la console Firebase.
Lien de build téléchargé :
En conclusion, nous avons couvert le flux de travail CI/CD via Fastlane et Firebase sur la machine locale dans la partie 2. Nous expliquerons dans la partie suivante comment utiliser le flux de travail CI/CD via Fastlane et Firebase avec les actions Gitlab. Restez à l’écoute!
Source link