ããã«ã¡ã¯ãæè¡é¨ã¢ãã¤ã«åºç¤ã°ã«ã¼ãã® @giginet ã§ãã
fastlaneã®Core Contributorãåãã¦ããã 社å ã§ã¯ããã®ã³ã¼ããµã¤ã³è§£æ±ºè *1 ã¨ãã¦ã®è·åçµé¨ãç©ãã§ãã¾ãã
ä»åã¯ã¯ãã¯ãããã§ã®fastlaneã使ã£ãiOSã¢ããªã®ãµããããèªååã¨ãè¨¼ææ¸ç®¡çã«ã¤ãã¦ã®äºä¾ãç´¹ä»ãããã¨æãã¾ãã
CIã«ããiOSã¢ããªãµããããã®èªåå
ã¯ãã¯ãããã§ã¯ãæ¨å¹´ã®æ¥é ããiOSã¢ããªã®ãµããããããã£ããbotçµç±ã§è¡ã£ã¦ãã¾ãã
ãã®ããã«ãSlackä¸ã§ãµããããã¸ã§ããå®è¡ããã¨ãCIã§ã¢ããªããã«ããããå¯©æ»æåºã¾ã§ãå®å ¨èªåã§è¡ã£ã¦ããã¾ãã

å¯©æ»æåºã«ã¯ããã«ããå¦çå¾ ã¡ã®æéãå«ããã¨å¤ãã®å·¥æ°ããããã人çºçãªãã¹ãèµ·ããå¯è½æ§ãããã¾ãããã å®å ¨ãªèªååã«ãããé«é »åº¦ã®ã¢ããªãªãªã¼ã¹ã«èããããããã«ãªãã¾ããã
ã¢ã¼ããã¯ãã£ã¯ä»¥ä¸ã®å³ã®ããã«ãªã£ã¦ããããã£ããbotããJenkinsã®ã¸ã§ããå®è¡ããããã§fastlaneãå©ç¨ãã¦ãã¾ãã

詳ããç¥ãããæ¹ã¯ä¸è¨ã®è³æãã覧ãã ããã
ãã®ä»çµã¿ã¯ãæ¨å¹´ã¾ã§ã¯ã¯ãã¯ãããã¢ããªã§ã®ã¿è¡ã£ã¦ãã¾ããã
ããããä»å¹´ã«å ¥ã£ã¦ããã©ã¤ãé ä¿¡ã¢ããªã®cookpadTVããã¬ã·ãã®æç¨¿è ããã使ããããã¯ãã¯ããã MYãããã³ãªã©ãæ°è¦ã¢ããªã®éçºãæ´»çºã«ãªããã»ãã®ã¢ããªã§ãèªåãµããããã®ä»çµã¿ãå°å ¥ããå¿ è¦ãåºã¦ãã¾ããã
ãã®ãããªä»çµã¿ãã¹ã±ã¼ã«ããã«å½ãã£ã¦ãä¸çªã®é害ã«ãªãã®ããã¯ãã³ã¼ããµã¤ã³ã§ãã ã¯ãã¯ãããã§ã¯ãè¤æ°å°ã®Mac端æ«ãCIãµã¼ãã¼ã¨ãã¦éç¨ãã¦ããããã®å ¨ã¦ã«ãå¤ãã®Provisioning Profileãé å¸ãæ´æ°ããå¿ è¦ãããã¾ããã ããããæåã§ç®¡çããã®ã¯ç¾å®çã§ã¯ããã¾ããã
fastlane/matchã使ã£ãè¨¼ææ¸ç®¡ç
ããã§ãfastlaneã®ã¦ã¼ãã£ãªãã£ã®1ã¤ã§ããmatchãå©ç¨ãã¦ãè¨¼ææ¸ãProvisioning Profileã®ç®¡çãé å¸ãèªååãã¾ããã
matchã®ä»çµã¿
matchã¯ãè¨¼ææ¸ãç§å¯éµãProvisioning Profileããgit管çããè¤æ°ã®ç°å¢ã§å ±æã§ããããã«ãããã¼ã«ã§ãã Apple Developer Centerã®APIãå©ãã¦è¨¼ææ¸ãProvisioning Profileã使ããæå·åãæ½ãã¦gitãªãã¸ããªã«å ±æãã¦ããã¾ãã

ã¾ããiOSã¢ããªã±ã¼ã·ã§ã³ã®ãªãã¸ããªã«Matchfileã¨ããè¨å®ãã¡ã¤ã«ãè¨ç½®ãã¾ãã
ããã§ãmatchå©ç¨æã«ããã©ã«ãã§è¨å®ããããã©ã¡ã¼ã¿ãæå®ã§ãã¾ãã
ããã§ã¯ãã³ãããå ã®ãªãã¸ããªãäºãæå®ãã¦ãã¾ãã
git_url "[email protected]:cookpad/certificates.git"
次ã«ãéçºè ã¯éçºç°å¢ããProvisioning Profileã使ãã¾ããmatchã¯CLIãæä¾ãã¦ãããããããã使ãã®ã便å©ã§ãã
typeãæå®ãããã¨ã§ãã¹ãã¢é
å¸ç¨ã®ã»ããAdHocãã«ãããEnterpriseé
å¸ç¨ã®Provisioning Profileã使ã§ãã¾ãã
$ fastlane match --type appstore \
--app_identifier com.cookpad.awesome-app,com.cookpad.awesome-app.NotificationService
ãã®æä½ã§ãProvisioning Profileãçæãã³ãããããã¾ããã
æå·åã復å·åã«å©ç¨ãããã¹ãã¬ã¼ãºã¯ãååèµ·åæã®ã¿å¯¾è©±çã«èããã以å¾ã¯macOSã®ãã¼ãã§ã¼ã³ã«ä¿åããã¾ãã
ã¾ããMATCH_PASSWORDã®ç°å¢å¤æ°ã§æå®ãããã¨ãã§ãã¾ãã
CIãµã¼ãã¼ã§ãã«ãããéã¯ãfastlaneãç¨ãã¦ã以ä¸ã®ããã«ç°¡åã«è¨¼ææ¸ã®åå¾ãã³ã¼ããµã¤ã³ãè¡ããã¨ãã§ãã¾ãã
Fastfileä¸ã«ä»¥ä¸ã®ããã«è¨è¿°ãã¾ãã
# Sync certificates and Provisioning Profiles via git repository match( app_identifier: ["com.cookpad.awesome-app", "com.cookpad.awesome-app.NotificationService"], type: 'appstore', readonly: true, ) # Build iOS app with the profiles build_ios_app
readonlyã¯ããªãã¸ããªãApple Developer Centerã«å¤æ´ãå ããªãããã«ããããã®è¨å®å¤ã§ãã
CIãµã¼ãã¼ããã®Provisioning Profileãè¨¼ææ¸ã®ä¸ç¨æãªæ´æ°ãé²ãã¾ãã
ããã«ãããæå ã§è¨¼ææ¸ã®æ´æ°ã追å 使¥ãè¡ãã ãã§ãå ¨ã¦ã®ãã«ãç°å¢ã§ææ°ã®è¨¼ææ¸é¡ãå©ç¨ã§ããããã«ãªãã¾ããã

è¤æ°ã©ã¤ã»ã³ã¹ã§ã®matchã®å©ç¨
ã¾ããã¯ãã¯ãããã§ã¯ãAppleã®Developerã©ã¤ã»ã³ã¹(ãã¼ã )ããã¹ãã¢å ¬éç¨ã®ã©ã¤ã»ã³ã¹ã®ã»ãã社å é å¸ç¨ã®Enterpriseã©ã¤ã»ã³ã¹ãå§ãã¨ããè¤æ°ã®ã©ã¤ã»ã³ã¹ãå©ç¨ãã¦ãã¾ãã
matchã§ã¯ã©ã¤ã»ã³ã¹ãã¨ã«å¥ã®gitãã©ã³ãã使ãããã¨ã§ãè¤æ°ã®ã©ã¤ã»ã³ã¹ã®è¨¼ææ¸é¡ãã1ã¤ã®ãªãã¸ããªã§ç®¡çãããã¨ãã§ãã¾ãã
CLIã§ã¯ã以ä¸ã®ããã«git_branchãªãã·ã§ã³ã渡ãã¾ãã
$ fastlane match --type enterprise \
--app_identifier com.cookpad.awesome-app,com.cookpad.awesome-app.NotificationService \
--git_branch enterprise \
--team_id $ENTERPRISE_TEAM_ID
ãã®å ´åã以ä¸ã®ããã«ãã«ãæã«è¨¼ææ¸é¡ãåå¾ã§ãã¾ãã
# Sync certificates and Provisioning Profiles via git repository match( app_identifier: ["com.cookpad.awesome-app-for-inhouse", "com.cookpad.awesome-app-for-inhouse.NotificationService"], git_branch: 'enterprise', team_id: enterprise_team_id, type: 'enterprise', readonly: true, ) # Build iOS app with the profiles build_ios_app
éç¨ãã¦ã¿ã¦ã®åé¡ç¹
ä¸è¦ä¾¿å©ãªmatchã§ãããä»åå¤§è¦æ¨¡ã«éç¨ãã¦ã¿ã¦ãä¸è¨ã®ãããªåé¡ã«ç´é¢ãã¾ããã
1ã©ã¤ã»ã³ã¹å½ããåæã«1ã¤ã®è¨¼ææ¸ããæ±ããªãåé¡
matchã®ä¸çªã®åé¡ç¹ã¯ãåæã«ç®¡çã§ããè¨¼ææ¸ã1ã¤ã«å¶éããã¦ãã¾ãã¨ããåé¡ã§ãã
Apple Developer Centerã§ã¯ã1ã©ã¤ã»ã³ã¹å½ããåæã«2ã¤ã®è¨¼ææ¸ã使ãããã¨ãã§ãã¾ãããmatchã§ã¯ãæ°ããè¨¼ææ¸ã使ãããå ´åã¯ãmatch nukeã¨å¼ã°ããæ©è½ã使ããæ¢åã®è¨¼ææ¸ã¨ããããå©ç¨ãã¦ããProvisioning Profileãå
¨ã¦revokeããå¿
è¦ãããã¾ãã
ãã®ãããè¨¼ææ¸ãexpireããåã«ãæ°æ§2ã¤ã®è¨¼ææ¸ãç¨æããå¾ã ã«åãæ¿ãã¦ããã¨ããæ¹æ³ãåããã¨ãã§ãã¾ããã
ãã®åé¡ã¯issueã«ããªã£ã¦ããè°è«ããã¦ãã¾ãããä»ã®ã¨ãã対å¿ããã¦ããã¾ããã
Provisioning Profile使æã«è¨¼ææ¸ã®IDãæ¸¡ããã¨ã§è¤æ°ã®è¨¼ææ¸ã管çã§ããä»çµã¿ãå人çã«æ¤è¨ãã¦ããããã®ãã¡éçºãããã¨èãã¦ãã¾ãã
Enterpriseã©ã¤ã»ã³ã¹ã®è¨¼ææ¸æ´æ°ã§å°ãåé¡
ãµããããç¨ã®è¨¼ææ¸ãProvisioning Profileã¯ãrevokeãã¦ãããã§ã«App Storeã«ãªãªã¼ã¹ãã¦ããã¢ããªã¯å½±é¿ãåãã¾ããã ä¸è¨ã®åé¡ã®å½±é¿ã大ããåããã®ãApple Developer Enterpriseã©ã¤ã»ã³ã¹ã§ãã
Enterpriseè¨¼ææ¸ã§App Storeãçµç±ããã«é å¸ãã¦ããã¢ããªã¯ãè¨¼ææ¸ãrevokeãããç¬éã«ãå ¨ã¦ã®ã¤ã³ã¹ãã¼ã«æ¸ã¿ã®ç«¯æ«ã§ãã®è¨¼ææ¸ã使ã£ã¦ç½²åããã¢ããªãåä½ããªããªãã¾ãã
ä¾ãã°ã¯ãã¯ãããã§ã¯ãæè¿Cookpad Studioã¨ãããã¦ã¼ã¶ã¼ãããå®åºèã§æçåç»ãåé²ã§ãããµã¼ãã¹ãå±éãã¦ãã¾ãã
ãã¡ãã§ã¯ãå ¨å½ã®ã¹ã¿ã¸ãªã§Enterpriseã©ã¤ã»ã³ã¹ã§é å¸ããæ¥åç¨ã¢ããªãå©ç¨ãã¦ããã®ã§ãããè¨¼ææ¸ã®revokeã«ããåä½ããªããªãå±éºæ§ãããã¾ãã
å¤ãã®ç«¯æ«ãå©ç¨ãã¦ããã®ã§ãå ¨å½ã§åæã«æ´æ°ä½æ¥ãããã®ã¯å®¹æã§ã¯ããã¾ããããç¾å¨ã®matchã§ã¯å³æã®revokeããã§ããªããããè¨¼ææ¸ã®æ´æ°æã«åé¡ãçºçãããã¨ãäºæ³ããã¾ãã
ãã®åé¡ããä¸è¨ã¨åæ§ã«è¤æ°è¨¼ææ¸ã®åå¨ã許容ãããã¨ã§è§£æ±ºã§ããã§ãããã
è¤æ°ã©ã¤ã»ã³ã¹å©ç¨æã«ã³ãããå ãå¶ç´ã§ããªãåé¡
è¤æ°ã©ã¤ã»ã³ã¹ã®éç¨ã«ã¤ãã¦ãæ´ç·´ããã¦ããªãé¨åãç®ç«ã¡ã¾ããã
ç¾å¨ã®matchã§ã¯ãProvisioning Profile使æã®æä½ãã¹ã«ããã1ã¤ã®ãã©ã³ãã«è¤æ°ã®Developerã©ã¤ã»ã³ã¹ãæ··å¨ããããã¨ãã§ãã¦ãã¾ãã¾ãã ããã«ãããä¸è¦ãªè¨¼ææ¸ãçºè¡ããã¦ãã¾ã£ããã解決ãé¢åãªç¶æ ãçºçãã¦ãã¾ãã¾ãã
ããã¯åãã©ã³ãã«Team IDãæå®ãããã¡ã¤ã«ãå«ãã§ãã¾ããå¥ã®Developerã©ã¤ã»ã³ã¹ã§ä½æããè¨¼ææ¸ã®ã³ããããç¦æ¢ãããªã©ã®æ©è½ã§å¯¾å¿ã§ããããªã®ã§ããã®ãããªä»çµã¿ãææ¡ãå®è£ ãããã¨æã£ã¦ãã¾ãã
ã¾ã¨ã
ãã®ããã«ãiOSã¢ããªã®ã³ã¼ããµã¤ã³å¨ãã¯é常ã«è¤éã§ãç¹æ®ãªè¨ç·´ãç¥èãå¿ è¦ã«ãªãã¾ããããããã¯ãéçºã«ããã¦æ¬è³ªçã§ã¯ãªãåé¡ãçºçããã¡ãªé åã§ãã
å ¨ã¦ã®ã¢ããªéçºè ãéçºã«æ³¨åã§ãããããä»å¾ãfastlaneã®éçºãªã©ãéãã¦ãçç£æ§åä¸ã¸è²¢ç®ãã¦ããããã¨æã£ã¦ãã¾ãã
ã¯ãã¯ãããã®ã¢ãã¤ã«åºç¤ãã¼ã ã§ã¯ãã¢ããªéçºè ã®çç£æ§ãåä¸ããããã¨ã³ã¸ãã¢ãåéãã¦ãã¾ãã
iOS ã¢ããªã±ã¼ã·ã§ã³ã¨ã³ã¸ãã¢ï¼éçºåºç¤ï¼ Android ã¢ããªã±ã¼ã·ã§ã³ã¨ã³ã¸ãã¢ï¼éçºåºç¤ï¼