หลังจากที่ AppStore Connect เปลี่ยน API เลิกการใช้ Username, password, OTP, และ app-password ไปทำให้ถึงเวลาที่ fastlane ต้องยกเครื่อง ต้องใช้ fastlane 2.162.0 ขึ้นไปเท่านั้น
Create API KEY
ขั้นแรกเราต้องเข้าไปที่ https://appstoreconnect.apple.com/access/api ก่อน หรือ
- Login ที่ https://appstoreconnect.apple.com ครั้งแรกที่ทำต้องใช้ Account Holder เท่านั้น ใช้ Admin ไม่พอนะ ใครที่ทำหายไปแล้วไปตามหามาด้วย
- เข้าไปที่ https://appstoreconnect.apple.com/access/api หรือ Login > Users and Access > Keys >
- กด Request Access
- อ่านให้เรียบร้อย แล้วติ๊กยอมรับ แล้วกด Submit หลังจากตรงนี้ใช้ Admin ขึ้นไปได้ละ
- กด Generate API Key
- ตั้งชื่อ เช่น Fastlane, Access เลือกเป็น level ของ user ที่เราจะให้ใช้ API Key ตัวที่กำลังจะสร้าง เลือก Developer หรือ Admin ไม่เป็นไรถ้าสร้างแล้วใช้ไม่ได้มาสร้างใหม่ได้เรื่อย ๆ
- กด Download API Key ดาวโหลดได้ครั้งเดียวนะ ทำหายให้ Revoke แล้วสร้างใหม่
- เอา key ที่ได้มาไปเก็บไว้ที่ปลอดภัย เช่น AWS Key Management แต่ถ้า ไม่ได้สนใจ security อะไรมากก็โพสขึ้่น pantip (หยอกนะ)
Create JSON file for App Store config in Fastlane
ต่อมาเราจะมาสร้าง .json file ที่เก็บตัวข้อมูลที่ใช้ในการต่อกับ App Store Connect
{
"key_id": "<KEY_ID>",
"issuer_id": "<ISSURE_ID>",
"key": "-----BEGIN PRIVATE KEY-----\nKEY_PART1\nKEY_PART2\n...\n-----END PRIVATE KEY-----",
"duration": 1200,
"in_house": false
}
โดยให้แทนค่า KEY_ID, ISSUE_ID ที่มาจากหน้า https://appstoreconnect.apple.com/access/api หนะแหละ แล้วเปิดไว้ .p8 ที่ดาวโหลดมาได้แล้วเอาไปแทน value ตรง key และแทนการขึ้นบรรทัดใหม่ด้วยการ \n
Use it
เหมือนเดิมเอาไปวางไว้ใน Key Management หรือ เอาง่าย ๆ ก็วางไว้กับ Fastfile เลยก็ได้ ในกรณีนี้วางไว้ที่ fastlane/app-store-connect.json
เสร็จแล้วใน Deliverfile, Matchfile, Precheckfile, หรือไฟล์ที่เกี่ยวกับ App Store Connect ว่า api_key_path("fastlane/app-store-connect.json")
เท่านี้ก็ใช้งานได้แล้ว ให้ลองใช้ distribute, match อะไรพวกนี้ดูว่าสามารถใช้งานได้หรือไม่
ปล.
จริง ๆ มีอีกวิธีคือเขียน Code ใน Fastfile แต่เราพบว่า code มันยั๊วเยี๊ยไปหมด เราเลยนำเสนอแค่แบบการใช้ config json เท่านั้น
ถ้าใครเจอ Unresolved conflict between options: 'api_key' and 'username'
ให้ลองลบพวก username หรือ FASTLANE_USERNAME
ออกไปเพราะมันชนกัน
Reference:
Top comments (0)