เช…เชฎเซ‡ เชซเชพเชฏเชฐเชฌเซ‡เช เชŸเซ‡เชธเซเชŸ เชฒเซ‡เชฌเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซเชฐเซเชฎเซ‡เชจเซเชŸเชฒ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเซ€เช เช›เซ€เช. เชญเชพเช— 1: iOS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ

เช…เชฎเซ‡ เชซเชพเชฏเชฐเชฌเซ‡เช เชŸเซ‡เชธเซเชŸ เชฒเซ‡เชฌเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซเชฐเซเชฎเซ‡เชจเซเชŸเชฒ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเซ€เช เช›เซ€เช. เชญเชพเช— 1: iOS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ

เชฎเชพเชฐเซเช‚ เชจเชพเชฎ เชฆเชฟเชฎเชฟเชคเซเชฐเซ€ เช›เซ‡, เชนเซเช‚ เช•เช‚เชชเชจเซ€เชฎเชพเช‚ เชŸเซ‡เชธเซเชŸเชฐ เชคเชฐเซ€เช•เซ‡ เช•เชพเชฎ เช•เชฐเซเช‚ เช›เซเช‚ เชเชฎ.เชˆ.เชเชฒ. เชตเชฟเชœเซ .เชพเชจ. เชคเชฆเซเชฆเชจ เชคเชพเชœเซ‡เชคเชฐเชฎเชพเช‚ เชฎเซ‡เช‚ เชฎเชพเช‚เชฅเซ€ เชชเซเชฐเชฎเชพเชฃเชฎเชพเช‚ เชคเชพเชœเซ‡เชคเชฐเชจเซ€ เชธเซเชตเชฟเชงเชพ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซเช‚ เชธเชฎเชพเชชเซเชค เช•เชฐเซเชฏเซเช‚ เชซเชพเชฏเชฐเชฌเซ‡เช เชŸเซ‡เชธเซเชŸ เชฒเซ‡เชฌ โ€” เชเชŸเชฒเซ‡ เช•เซ‡, เชฎเซ‚เชณ เชชเชฐเซ€เช•เซเชทเชฃ เชซเซเชฐเซ‡เชฎเชตเชฐเซเช• XCUITest เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ iOS เชเชชเซเชฒเซ€เช•เซ‡เชถเชจเชจเชพ เช‡เชจเซเชธเซเชŸเซเชฐเซเชฎเซ‡เชจเซเชŸเชฒ เชชเชฐเซ€เช•เซเชทเชฃ เชธเชพเชฅเซ‡.

เช† เชชเชนเซ‡เชฒเชพ, เชฎเซ‡เช‚ เชเชจเซเชกเซเชฐเซ‹เช‡เชก เชฎเชพเชŸเซ‡ เชซเชพเชฏเชฐเชฌเซ‡เช เชŸเซ‡เชธเซเชŸ เชฒเซ‡เชฌ เช…เชœเชฎเชพเชตเซ€ เชšเซเช•เซ€ เช›เซ‡ เช…เชจเซ‡ เช–เชฐเซ‡เช–เชฐ เชฌเชงเซเช‚ เช—เชฎเซเชฏเซเช‚, เชคเซ‡เชฅเซ€ เชฎเซ‡เช‚ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเชพ iOS เชŸเซ‡เชธเซเชŸ เช‡เชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเซ‡ เชธเชฎเชพเชจ เชงเซ‹เชฐเชฃเซ‡ เชฎเซ‚เช•เชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚. เชฎเชพเชฐเซ‡ เช˜เชฃเซเช‚ เช—เซ‚เช—เชฒ เช•เชฐเชตเซเช‚ เชชเชกเซเชฏเซเช‚ เชนเชคเซเช‚ เช…เชจเซ‡ เชฌเชงเซเช‚ เชชเชนเซ‡เชฒเซ€เชตเชพเชฐ เช•เชพเชฎ เช•เชฐเชคเซเช‚ เชจ เชนเชคเซเช‚, เชคเซ‡เชฅเซ€ เชฎเซ‡เช‚ เชคเซ‡ เชฒเซ‹เช•เซ‹ เชฎเชพเชŸเซ‡ เชŸเซเชฏเซเชŸเซ‹เชฐเซ€เชฏเชฒ เชฒเซ‡เช– เชฒเช–เชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚ เชœเซ‡เช“ เชนเชœเซ€ เชชเชฃ เชธเช‚เช˜เชฐเซเชท เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ‡.

เชคเซ‡เชฅเซ€, เชœเซ‹ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ iOS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชชเชฐ UI เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เช›เซ‡, เชคเซ‹ เชคเชฎเซ‡ เชคเซ‡เชจเซ‡ เช†เชœเซ‡ เชœ เชตเชพเชธเซเชคเชตเชฟเช• เช‰เชชเช•เชฐเชฃเซ‹ เชชเชฐ เชšเชฒเชพเชตเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เช•เซƒเชชเชพ เช•เชฐเซ€เชจเซ‡ เช—เซเชก เช•เซ‹เชฐเซเชชเซ‹เชฐเซ‡เชถเชจ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชฐเชธ เชงเชฐเชพเชตเชคเชพ เชฒเซ‹เช•เซ‹ เชฎเชพเชŸเซ‡, เชฌเชฟเชฒเชพเชกเซ€เชฎเชพเช‚ เช†เชชเชจเซเช‚ เชธเซเชตเชพเช—เชค เช›เซ‡.

เชตเชพเชฐเซเชคเชพเชฎเชพเช‚, เชฎเซ‡เช‚ เช•เซ‡เชŸเชฒเชพเช• เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชกเซ‡เชŸเชพ เชชเชฐ เชฌเชฟเชฒเซเชก เช•เชฐเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚ - GitHub เช…เชจเซ‡ CircleCI เชฌเชฟเชฒเซเชก เชธเชฟเชธเซเชŸเชฎ เชชเชฐ เชเช• เช–เชพเชจเช—เซ€ เชญเช‚เชกเชพเชฐ. เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซเช‚ เชจเชพเชฎ AmazingApp เช›เซ‡, bundleID com.company.amazingapp เช›เซ‡. เช…เชจเซเช—เชพเชฎเซ€ เชฎเซ‚เช‚เชเชตเชฃ เช˜เชŸเชพเชกเชตเชพ เชฎเชพเชŸเซ‡ เชนเซเช‚ เชคเชฐเชค เชœ เช† เชกเซ‡เชŸเชพ เชฐเชœเซ‚ เช•เชฐเซเช‚ เช›เซเช‚.

เชœเซ‹ เชคเชฎเซ‡ เชคเชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เช…เชฎเซเช• เช‰เช•เซ‡เชฒเซ‹เชจเซ‡ เช…เชฒเช— เชฐเซ€เชคเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เซเชฏเชพ เชนเซ‹เชฏ, เชคเซ‹ เชคเชฎเชพเชฐเซ‹ เช…เชจเซเชญเชต เชŸเชฟเชชเซเชชเชฃเซ€เช“เชฎเชพเช‚ เชถเซ‡เชฐ เช•เชฐเซ‹.

1. เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชชเซ‹เชคเชพเชจเซ‡

UI เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชฎเชพเชŸเซ‡ เชจเชตเซ€ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชถเชพเช–เชพ เชฌเชจเชพเชตเซ‹:

$ git checkout develop
$ git pull
$ git checkout -b โ€œfeature/add-ui-testsโ€

เชšเชพเชฒเซ‹ XCode เชฎเชพเช‚ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช–เซ‹เชฒเซ€เช เช…เชจเซ‡ UI เชชเชฐเซ€เช•เซเชทเชฃเซ‹ [XCode -> เชซเชพเช‡เชฒ -> เชจเชตเซเช‚ -> เชฒเช•เซเชทเซเชฏ -> iOS เชชเชฐเซ€เช•เซเชทเชฃ เชฌเช‚เชกเชฒ] เชธเชพเชฅเซ‡ เชเช• เชจเชตเซเช‚ เชฒเช•เซเชทเซเชฏ เชฌเชจเชพเชตเซ€เช, เชคเซ‡เชจเซ‡ AmazingAppUITests เชจเชพเชฎ เช†เชชเซ‹.

เช…เชฎเซ‡ เชซเชพเชฏเชฐเชฌเซ‡เช เชŸเซ‡เชธเซเชŸ เชฒเซ‡เชฌเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซเชฐเซเชฎเซ‡เชจเซเชŸเชฒ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเซ€เช เช›เซ€เช. เชญเชพเช— 1: iOS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ

เชฌเชจเชพเชตเซ‡เชฒ เชŸเชพเชฐเซเช—เซ‡เชŸเชจเชพ เชฌเชฟเชฒเซเชก เชซเซ‡เช เชธเซ‡เช•เซเชถเชจ เชชเชฐ เชœเชพเช“ เช…เชจเซ‡ เช•เชฎเซเชชเชพเชˆเชฒ เชธเซ‹เชฐเซเชธเซ€เชธ - AmazingAppUITests.swift เชฎเชพเช‚ เชŸเชพเชฐเซเช—เซ‡เชŸ เชกเชฟเชชเซ‡เชจเซเชกเชจเซเชธเซ€เช - AmazingApp เชจเซ€ เชนเชพเชœเชฐเซ€ เชคเชชเชพเชธเซ‹.

เชเช• เชธเชพเชฐเซ€ เชชเซเชฐเชฅเชพ เช เช›เซ‡ เช•เซ‡ เชตเชฟเชตเชฟเชง เชฌเชฟเชฒเซเชก เชตเชฟเช•เชฒเซเชชเซ‹เชจเซ‡ เช…เชฒเช—-เช…เชฒเช— เชธเซเช•เซ€เชฎเชฎเชพเช‚ เช…เชฒเช— เช•เชฐเซ‹. เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ UI เชชเชฐเซ€เช•เซเชทเชฃเซ‹ [XCode -> เชชเซเชฐเซ‹เชกเช•เซเชŸ -> เชธเซเช•เซ€เชฎ -> เชจเชตเซ€ เชธเซเช•เซ€เชฎ] เชฎเชพเชŸเซ‡ เชเช• เชธเซเช•เซ€เชฎ เชฌเชจเชพเชตเซ€เช เช›เซ€เช เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช เชœ เชจเชพเชฎ เช†เชชเซ€เช เช›เซ€เช: AmazingAppUITests.

เชฌเชจเชพเชตเซ‡เชฒ เชธเซเช•เซ€เชฎเชจเชพ เชจเชฟเชฐเซเชฎเชพเชฃเชฎเชพเช‚ เชฎเซเช–เซเชฏ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซเช‚ เชฒเช•เซเชทเซเชฏ เชถเชพเชฎเซ‡เชฒ เชนเซ‹เชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡ - AmazingApp เช…เชจเซ‡ Target UI เชชเชฐเซ€เช•เซเชทเชฃเซ‹ - AmazingAppUITests - เชธเซเช•เซเชฐเซ€เชจเชถเซ‹เชŸ เชœเซเช“

เช…เชฎเซ‡ เชซเชพเชฏเชฐเชฌเซ‡เช เชŸเซ‡เชธเซเชŸ เชฒเซ‡เชฌเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซเชฐเซเชฎเซ‡เชจเซเชŸเชฒ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเซ€เช เช›เซ€เช. เชญเชพเช— 1: iOS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ

เช†เช—เชณ, เช…เชฎเซ‡ UI เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชฎเชพเชŸเซ‡ เชเช• เชจเชตเซเช‚ เชฌเชฟเชฒเซเชก เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฌเชจเชพเชตเซ€เช เช›เซ€เช. XCode เชฎเชพเช‚, เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชซเชพเช‡เชฒ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹ เช…เชจเซ‡ เชฎเชพเชนเชฟเชคเซ€ เชตเชฟเชญเชพเช— เชชเชฐ เชœเชพเช“. โ€œ+โ€ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹ เช…เชจเซ‡ เชจเชตเซเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฌเชจเชพเชตเซ‹, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ XCtest. เชœเซเชฏเชพเชฐเซ‡ เช•เซ‹เชก เชธเชพเช‡เชจเชฟเช‚เช—เชจเซ€ เชตเชพเชค เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡ เชŸเซ‡เชฎเซเชฌเซ‹เชฐเชฟเชจ เชธเชพเชฅเซ‡ เชจเซƒเชคเซเชฏ เช•เชฐเชตเชพเชจเซเช‚ เชŸเชพเชณเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเชจเซ‡ เชญเชตเชฟเชทเซเชฏเชฎเชพเช‚ เช†เชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡.

เช…เชฎเซ‡ เชซเชพเชฏเชฐเชฌเซ‡เช เชŸเซ‡เชธเซเชŸ เชฒเซ‡เชฌเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซเชฐเซเชฎเซ‡เชจเซเชŸเชฒ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเซ€เช เช›เซ€เช. เชญเชพเช— 1: iOS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ

เชคเชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ เชคเซเชฐเชฃ เชฒเช•เซเชทเซเชฏเซ‹ เช›เซ‡: เชฎเซเช–เซเชฏ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ, เชเช•เชฎ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ (เช›เซ‡เชตเชŸเซ‡, เชคเซ‡เช“ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เช›เซ‡, เช–เชฐเซเช‚ เชจเซ‡?) เช…เชจเซ‡ เช…เชฎเซ‡ เชฌเชจเชพเชตเซ‡เชฒเชพ เชฒเช•เซเชทเซเชฏเชพเช‚เช• UI เชชเชฐเซ€เช•เซเชทเชฃเซ‹.

Target AmazingApp, เชฌเชฟเชฒเซเชก เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชŸเซ‡เชฌ, Code Signing Identity เชตเชฟเชญเชพเช— เชชเชฐ เชœเชพเช“. XCtest เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฎเชพเชŸเซ‡, iOS เชกเซ‡เชตเชฒเชชเชฐ เชชเชธเช‚เชฆ เช•เชฐเซ‹. เช•เซ‹เชก เชนเชธเซเชคเชพเช•เซเชทเชฐ เชถเซˆเชฒเซ€ เชตเชฟเชญเชพเช—เชฎเชพเช‚, เชฎเซ‡เชจเซเชฏเซเช…เชฒ เชชเชธเช‚เชฆ เช•เชฐเซ‹. เช…เชฎเซ‡ เชนเชœเซ€ เชธเซเชงเซ€ เชชเซเชฐเซ‹เชตเชฟเชเชจเชฟเช‚เช— เชชเซเชฐเซ‹เชซเชพเช‡เชฒ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ€ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เชšเซ‹เช•เซเช•เชธเชชเชฃเซ‡ เชคเซ‡เชจเชพ เชชเชฐ เชฅเซ‹เชกเชพ เชธเชฎเชฏ เชชเช›เซ€ เชชเชพเช›เชพ เช†เชตเซ€เชถเซเช‚.

Target AmazingAppUITests เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เชคเซ‡ เชœ เช•เชฐเซ€เช เช›เซ€เช, เชชเชฐเช‚เชคเซ เชชเซเชฐเซ‹เชกเช•เซเชŸ เชฌเช‚เชกเชฒ เช“เชณเช–เช•เชฐเซเชคเชพ เช•เซ‰เชฒเชฎเชฎเชพเช‚ เช…เชฎเซ‡ com.company.amazingappuitest เชฆเชพเช–เชฒ เช•เชฐเซ€เช เช›เซ€เช.

2. เชเชชเชฒ เชกเซ‡เชตเชฒเชชเชฐ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฎเชพเช‚ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเซ‡เชŸ เช•เชฐเชตเซ‹

Apple เชกเซ‡เชตเชฒเชชเชฐ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชชเซƒเชทเซเช  เชชเชฐ เชœเชพเช“, เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹, เช“เชณเช–เช•เชฐเซเชคเชพเช“ เช…เชจเซ‡ เชชเซเชฐเซ‹เชซเชพเช‡เชฒเซเชธ เชตเชฟเชญเชพเช— เชชเชฐ เชœเชพเช“ เช…เชจเซ‡ เชชเช›เซ€ เช“เชณเช–เช•เชฐเซเชคเชพ เช†เช‡เชŸเชฎเชจเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ IDs เช•เซ‰เชฒเชฎ เชชเชฐ เชœเชพเช“. AmazingAppUITests เช…เชจเซ‡ bundleID com.company.amazingappuitest เชจเชพเชฎเชจเซเช‚ เชเช• เชจเชตเซเช‚ เชเชช ID เชฌเชจเชพเชตเซ‹.

เช…เชฎเซ‡ เชซเชพเชฏเชฐเชฌเซ‡เช เชŸเซ‡เชธเซเชŸ เชฒเซ‡เชฌเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซเชฐเซเชฎเซ‡เชจเซเชŸเชฒ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเซ€เช เช›เซ€เช. เชญเชพเช— 1: iOS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ

เชนเชตเซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชเช• เช…เชฒเช— เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชธเชพเชฅเซ‡ เช…เชฎเชพเชฐเชพ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชชเชฐ เชธเชนเซ€ เช•เชฐเชตเชพเชจเซ€ เชคเช• เช›เซ‡, เชชเชฐเช‚เชคเซ... เชชเชฐเซ€เช•เซเชทเชฃ เชฎเชพเชŸเซ‡ เชฌเชฟเชฒเซเชก เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเชตเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‡ เชœ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเชตเซ€ เช…เชจเซ‡ เชŸเซ‡เชธเซเชŸ เชฐเชจเชฐเชจเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเชตเชพเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡. เชคเชฆเชจเซเชธเชพเชฐ, เช…เชฎเชจเซ‡ เชเช• เชชเซเชฐเซ‹เชตเชฟเชเชจเชฟเช‚เช— เชชเซเชฐเซ‹เชซเชพเช‡เชฒ เชธเชพเชฅเซ‡ เชฌเซ‡ เชฌเช‚เชกเชฒ ID เชชเชฐ เชธเชนเซ€ เช•เชฐเชตเชพเชจเซ€ เชธเชฎเชธเซเชฏเชพเชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเชตเซ‹ เชชเชกเซ€ เชฐเชนเซเชฏเซ‹ เช›เซ‡. เชธเชฆเชจเชธเซ€เชฌเซ‡, เชคเซเชฏเชพเช‚ เชเช• เชธเชฐเชณ เช…เชจเซ‡ เชญเชตเซเชฏ เช‰เช•เซ‡เชฒ เช›เซ‡ - เชตเชพเช‡เชฒเซเชกเช•เชพเชฐเซเชก เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ ID. เช…เชฎเซ‡ เชจเชตเซ€ เชเชช เช†เชˆเชกเซ€ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เช•เชฐเซ€เช เช›เซ€เช, เชชเชฐเช‚เชคเซ เชธเซเชชเชทเซเชŸ เชเชช เช†เชˆเชกเซ€เชจเซ‡ เชฌเชฆเชฒเซ‡, เชธเซเช•เซเชฐเซ€เชจเชถเซ‹เชŸเชจเซ€ เชœเซ‡เชฎ เชตเชพเชˆเชฒเซเชกเช•เชพเชฐเซเชก เชเชช เช†เชˆเชกเซ€ เชชเชธเช‚เชฆ เช•เชฐเซ‹.

เช…เชฎเซ‡ เชซเชพเชฏเชฐเชฌเซ‡เช เชŸเซ‡เชธเซเชŸ เชฒเซ‡เชฌเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซเชฐเซเชฎเซ‡เชจเซเชŸเชฒ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเซ€เช เช›เซ€เช. เชญเชพเช— 1: iOS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ

เช† เชฌเชฟเช‚เชฆเซเช, เช…เชฎเซ‡ developer.apple.com เชธเชพเชฅเซ‡ เช•เชพเชฎ เชชเซ‚เชฐเซเชฃ เช•เชฐเซ€ เชฒเซ€เชงเซเช‚ เช›เซ‡, เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เชฌเซเชฐเชพเช‰เชเชฐ เชตเชฟเชจเซเชกเซ‹เชจเซ‡ เชจเชพเชจเซ€ เชจเชนเซ€เช‚ เช•เชฐเซ€เช. เชšเชพเชฒเซ‹ เชœเชˆเช เชซเชพเชธเซเชŸเชฒเซ‡เชจ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชธเชพเช‡เชŸ เช…เชจเซ‡ เชฎเซ‡เชš เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€ เชตเชฟเชถเซ‡ เช•เชตเชฐเชฅเซ€ เช•เชตเชฐ เชธเซเชงเซ€ เชตเชพเช‚เชšเซ‹.

เชเช• เชธเชšเซ‡เชค เชตเชพเชšเช•เซ‡ เชจเซ‹เช‚เชงเซเชฏเซเช‚ เช›เซ‡ เช•เซ‡ เช† เช‰เชชเชฏเซ‹เช—เชฟเชคเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเชจเซ‡ เชเช• เช–เชพเชจเช—เซ€ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เช…เชจเซ‡ เชเชชเชฒ เชกเซ‡เชตเชฒเชชเชฐ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช…เชจเซ‡ เช—เซ€เชฅเชฌ เชฌเช‚เชจเซ‡เชจเซ€ เชเช•เซเชธเซ‡เชธ เชธเชพเชฅเซ‡ เชเช•เชพเช‰เชจเซเชŸเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡. เช…เชฎเซ‡ เชซเซ‹เชฐเซเชฎเชจเซเช‚ เชเช•เชพเช‰เชจเซเชŸ เชฌเชจเชพเชตเซ€เช เช›เซ€เช (เชœเซ‹ เช…เชšเชพเชจเช• เช†เชตเซ€ เช•เซ‹เชˆ เชตเชธเซเชคเซ เชจ เชนเซ‹เชฏ เชคเซ‹) [เช‡เชฎเซ‡เช‡เชฒ เชธเซเชฐเช•เซเชทเชฟเชค], เชฎเชœเชฌเซ‚เชค เชชเชพเชธเชตเชฐเซเชก เชธเชพเชฅเซ‡ เช†เชตเซ‹, เชคเซ‡เชจเซ‡ developer.apple.com เชธเชพเชฅเซ‡ เชฐเชœเซ€เชธเซเชŸเชฐ เช•เชฐเซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชเชกเชฎเชฟเชจเชฟเชธเซเชŸเซเชฐเซ‡เชŸเชฐ เชคเชฐเซ€เช•เซ‡ เชจเชฟเชฏเซเช•เซเชค เช•เชฐเซ‹. เช†เช—เชณ, เช…เชฎเซ‡ เชเช•เชพเช‰เชจเซเชŸเชจเซ‡ เชคเชฎเชพเชฐเซ€ เช•เช‚เชชเชจเซ€เชจเชพ เช—เซ€เชฅเชฌ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ€ เชเช•เซเชธเซ‡เชธ เช†เชชเซ€เช เช›เซ€เช เช…เชจเซ‡ เช…เชฎเซ‡เชเชฟเช‚เช— เชเชชเชฎเซ‡เชš เชœเซ‡เชตเชพ เชจเชพเชฎ เชธเชพเชฅเซ‡ เชเช• เชจเชตเซเช‚ เช–เชพเชจเช—เซ€ เชญเช‚เชกเชพเชฐ เชฌเชจเชพเชตเซ€เช เช›เซ€เช.

3. เชซเชพเชธเซเชŸเชฒเซ‡เชจ เช…เชจเซ‡ เชฎเซ‡เชš เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€ เชธเซ‡เชŸ เช•เชฐเชตเซ€

เชŸเชฐเซเชฎเชฟเชจเชฒ เช–เซ‹เชฒเซ‹, เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเชพเชฅเซ‡ เชซเซ‹เชฒเซเชกเชฐ เชชเชฐ เชœเชพเช“ เช…เชจเซ‡ เชฆเชฐเซเชถเชพเชตเซ‡เชฒ เชชเซเชฐเชฎเชพเชฃเซ‡ เชซเชพเชธเซเชŸเชฒเซ‡เชจ เชถเชฐเซ‚ เช•เชฐเซ‹ เชธเชคเซเชคเชพเชตเชพเชฐ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ. เช†เชฆเซ‡เชถ เชฆเชพเช–เชฒ เช•เชฐเซเชฏเชพ เชชเช›เซ€

$ fastlane init

เชคเชฎเชจเซ‡ เช‰เชชเชฒเชฌเซเชง เช‰เชชเชฏเซ‹เช— เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเซ‹ เชชเชธเช‚เชฆ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเช‚เช•เซ‡เชค เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เชšเซ‹เชฅเซ‹ เชตเชฟเช•เชฒเซเชช เชชเชธเช‚เชฆ เช•เชฐเซ‹ - เชฎเซ‡เชจเซเชฏเซเช…เชฒ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเซ‡เชŸเช…เชช.

เช…เชฎเซ‡ เชซเชพเชฏเชฐเชฌเซ‡เช เชŸเซ‡เชธเซเชŸ เชฒเซ‡เชฌเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซเชฐเซเชฎเซ‡เชจเซเชŸเชฒ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเซ€เช เช›เซ€เช. เชญเชพเช— 1: iOS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ

เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชจเชตเซ€ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€ เชซเชพเชธเซเชŸเชฒเซ‡เชจ เช›เซ‡, เชœเซ‡เชฎเชพเช‚ เชฌเซ‡ เชซเชพเชˆเชฒเซ‹ เช›เซ‡ - เชเชชเชซเชพเชˆเชฒ เช…เชจเซ‡ เชซเชพเชธเซเชŸเชซเชพเชˆเชฒ. เชŸเซ‚เช‚เช•เชฎเชพเช‚, เช…เชฎเซ‡ เชเชชเชซเชพเชˆเชฒเชฎเชพเช‚ เชธเชฐเซเชตเชฟเชธ เชกเซ‡เชŸเชพ เชธเซเชŸเซ‹เชฐ เช•เชฐเซ€เช เช›เซ€เช, เช…เชจเซ‡ เชซเชพเชธเซเชŸเชซเชพเชˆเชฒเชฎเชพเช‚ เชจเซ‹เช•เชฐเซ€เช“ เชฒเช–เซ€เช เช›เซ€เช, เชœเซ‡เชจเซ‡ เชซเชพเชธเซเชŸเชฒเซ‡เชจ เชชเชฐเชฟเชญเชพเชทเชพเชฎเชพเช‚ เชฒเซ‡เชจ เช•เชนเซ‡เชตเชพเชฏ เช›เซ‡. เชนเซเช‚ เชธเชคเซเชคเชพเชตเชพเชฐ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹ เชตเชพเช‚เชšเชตเชพเชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเซเช‚ เช›เซเช‚: เชตเช–เชค, ะดะฒะฐ.

เชคเชฎเชพเชฐเชพ เชฎเชจเชชเชธเช‚เชฆ เชŸเซ‡เช•เซเชธเซเชŸ เชเชกเชฟเชŸเชฐเชฎเชพเช‚ Appfile เช–เซ‹เชฒเซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชจเซ€เชšเซ‡เชจเชพ เชซเซ‹เชฐเซเชฎ เชชเชฐ เชฒเชพเชตเซ‹:

app_identifier "com.company.amazingapp"       # Bundle ID
apple_dev_portal_id "[email protected]"  # ะกะพะทะดะฐะฝะฝั‹ะน ะธะฝั„ั€ะฐัั‚ั€ัƒะบั‚ัƒั€ะฝั‹ะน ะฐะบะบะฐัƒะฝั‚, ะธะผะตัŽั‰ะธะน ะฟั€ะฐะฒะพ ะฝะฐ ั€ะตะดะฐะบั‚ะธั€ะพะฒะฐะฝะธะต iOS ะฟั€ะพะตะบั‚ะฐ ะฒ Apple Developer Program.
team_id "LSDY3IFJAY9" # Your Developer Portal Team ID

เช…เชฎเซ‡ เชŸเชฐเซเชฎเชฟเชจเชฒ เชชเชฐ เชชเชพเช›เชพ เชซเชฐเซ€เช เช›เซ€เช เช…เชจเซ‡ เช…เชงเชฟเช•เซƒเชค เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ เช…เชจเซเชธเชพเชฐ เช…เชฎเซ‡ เชฎเซ‡เชšเชจเซ‡ เช—เซ‹เช เชตเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ€เช เช›เซ€เช.

$ fastlane match init
$ fastlane match development

เช†เช—เชณ, เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ‡เชฒ เชกเซ‡เชŸเชพ เชฆเชพเช–เชฒ เช•เชฐเซ‹ - เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€, เชเช•เชพเช‰เชจเซเชŸ, เชชเชพเชธเชตเชฐเซเชก, เชตเช—เซ‡เชฐเซ‡.

เชคเซ‡ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡: เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชชเซเชฐเชฅเชฎ เชฎเซ‡เชš เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€ เชฒเซ‹เช‚เชš เช•เชฐเซ‹ เช›เซ‹, เชคเซเชฏเชพเชฐเซ‡ เชคเชฎเชจเซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ‡ เชกเชฟเช•เซเชฐเชฟเชชเซเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชชเชพเชธเชตเชฐเซเชก เชฆเชพเช–เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เช† เชชเชพเชธเชตเชฐเซเชก เชธเชพเชšเชตเชตเซ‹ เช–เซ‚เชฌ เชœ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡; CI เชธเชฐเซเชตเชฐ เชธเซ‡เชŸ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เช…เชฎเชจเซ‡ เชคเซ‡เชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡!

เชซเชพเชธเซเชŸเชฒเซ‡เชจ เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚ เชเช• เชจเชตเซ€ เชซเชพเช‡เชฒ เชฆเซ‡เช–เชพเชˆ เช›เซ‡ - เชฎเซ‡เชšเชซเชพเชˆเชฒ. เชคเซ‡เชจเซ‡ เชคเชฎเชพเชฐเชพ เชฎเชจเชชเชธเช‚เชฆ เชŸเซ‡เช•เซเชธเซเชŸ เชเชกเชฟเชŸเชฐเชฎเชพเช‚ เช–เซ‹เชฒเซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช† เชฐเซ€เชคเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเซ‹:

git_url("https://github.com/YourCompany/AmazingAppMatch") #ะกะพะทะดะฐะฝะฝั‹ะน ะฟั€ะธะฒะฐั‚ะฝั‹ะน ั€ะตะฟะพะทะธั‚ะพั€ะธะน ะดะปั ั…ั€ะฐะฝะตะฝะธั ัะตั€ั‚ะธั„ะธะบะฐั‚ะพะฒ ะธ ะฟั€ะพั„ะฐะนะปะพะฒ.
type("development") # The default type, can be: appstore, adhoc, enterprise or development
app_identifier("com.company.amazingapp")
username("[email protected]") # Your Infrastructure account Apple Developer Portal username

เชœเซ‹ เช…เชฎเซ‡ เชญเชตเชฟเชทเซเชฏเชฎเชพเช‚ Crashlytics เช…เชจเซ‡/เช…เชฅเชตเชพ AppStore เชฎเชพเช‚ เชชเซ‹เชธเซเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชเชŸเชฒเซ‡ เช•เซ‡ เชคเชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเชพ เชฌเช‚เชกเชฒ ID เชชเชฐ เชนเชธเซเชคเชพเช•เซเชทเชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฌเชฟเชฒเซเชกเซเชธ เชชเชฐ เชนเชธเซเชคเชพเช•เซเชทเชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฎเซ‡เชšเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเช‚เช—เชคเชพ เชนเซ‹เชต เชคเซ‹ เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชฌเชฐเชพเชฌเชฐ เช† เชฐเซ€เชคเซ‡ เชญเชฐเซ€เช เช›เซ€เช.

เชชเชฐเช‚เชคเซ, เชœเซ‡เชฎ เช…เชฎเชจเซ‡ เชฏเชพเชฆ เช›เซ‡, เช…เชฎเซ‡ เชŸเซ‡เชธเซเชŸ เชฌเชฟเชฒเซเชก เชชเชฐ เชนเชธเซเชคเชพเช•เซเชทเชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เชตเชฟเชถเชฟเชทเซเชŸ เชตเชพเช‡เชฒเซเชกเช•เชพเชฐเซเชก ID เชฌเชจเชพเชตเซเชฏเซเช‚ เช›เซ‡. เชคเซ‡เชฅเซ€, เชซเชพเชธเซเชŸเชซเชพเชˆเชฒ เช–เซ‹เชฒเซ‹ เช…เชจเซ‡ เชจเชตเซ€ เชฒเซ‡เชจ เชฆเชพเช–เชฒ เช•เชฐเซ‹:

lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"  # ัะพะทะดะฐะตะผ ะพั‚ะดะตะปัŒะฝั‹ะน ะฑั€ะฐะฝั‡ ะดะปั development ัะตั€ั‚ะธั„ะธะบะฐั‚ะฐ ะดะปั ะฟะพะดะฟะธัะธ ั‚ะตัั‚ะพะฒะพะน ัะฑะพั€ะบะธ.
    )

end

เชธเชพเชšเชตเซ‹ เช…เชจเซ‡ เชŸเชฐเซเชฎเชฟเชจเชฒเชฎเชพเช‚ เชฆเชพเช–เชฒ เช•เชฐเซ‹

fastlane testing_build_for_firebase

เช…เชจเซ‡ เช†เชชเชฃเซ‡ เชœเซ‹เชˆเช เช›เซ€เช เช•เซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชซเชพเชธเซเชŸเชฒเซ‡เชจเซ‡ เชจเชตเซเช‚ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชฌเชจเชพเชตเซเชฏเซเช‚ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เชฎเซ‚เช•เซเชฏเซเช‚. เชธเชฐเชธ!

XCode เช–เซ‹เชฒเซ‹. เชนเชตเซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ Match Development com.company.* เชซเซ‹เชฐเซเชฎเชจเซ€ เชœเชฐเซ‚เชฐเซ€ เชชเซเชฐเซ‹เชตเชฟเชเชจเชฟเช‚เช— เชชเซเชฐเซ‹เชซเชพเช‡เชฒ เช›เซ‡, เชœเซ‡ AmazingApp เช…เชจเซ‡ AmazingAppUITests เชฒเช•เซเชทเซเชฏเซ‹ เชฎเชพเชŸเซ‡ เชชเซเชฐเซ‹เชตเชฟเชเชจเชฟเช‚เช— เชชเซเชฐเซ‹เชซเชพเช‡เชฒ เชตเชฟเชญเชพเช—เชฎเชพเช‚ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชนเซ‹เชตเซ€ เช†เชตเชถเซเชฏเช• เช›เซ‡.

เช…เชฎเซ‡ เชซเชพเชฏเชฐเชฌเซ‡เช เชŸเซ‡เชธเซเชŸ เชฒเซ‡เชฌเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซเชฐเซเชฎเซ‡เชจเซเชŸเชฒ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเซ€เช เช›เซ€เช. เชญเชพเช— 1: iOS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ

เชคเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒเชฟเช‚เช— เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชฎเชพเชŸเซ‡ เชฒเซ‡เชจ เช‰เชฎเซ‡เชฐเชตเชพเชจเซเช‚ เชฌเชพเช•เซ€ เช›เซ‡. เชšเชพเชฒเซ‹ เชœเชˆเช เชญเช‚เชกเชพเชฐ เชซเชพเชธเซเชŸเชฒเซ‡เชจ เชฎเชพเชŸเซ‡เชจเซ‹ เชชเซเชฒเช—เช‡เชจ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชœเซ‡ เชซเชพเชฏเชฐเชฌเซ‡เช เชŸเซ‡เชธเซเชŸ เชฒเซ‡เชฌเชฎเชพเช‚ เชจเชฟเช•เชพเชธ เช•เชฐเชตเชพเชจเซเช‚ เชธเชฐเชณ เชฌเชจเชพเชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชธเซ‚เชšเชจเชพเช“เชจเซเช‚ เชชเชพเชฒเชจ เช•เชฐเซ‡ เช›เซ‡.

เชšเชพเชฒเซ‹ เชฎเซ‚เชณ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚เชฅเซ€ เช•เซ‹เชชเซ€-เชชเซ‡เชธเซเชŸ เช•เชฐเซ€เช เชœเซ‡เชฅเซ€ เช†เชชเชฃเซเช‚ เชฒเซ‡เชจ testing_build_for_firebase เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฆเซ‡เช–เชพเชฏ:


 lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"
    )

    scan(
      scheme: 'AmazingAppUITests',      # UI Test scheme
      clean: true,                        # Recommended: This would ensure the build would not include unnecessary files
      skip_detect_devices: true,          # Required
      build_for_testing: true,            # Required
      sdk: 'iphoneos',                    # Required
      should_zip_build_products: true,     # Must be true to set the correct format for Firebase Test Lab
    )

    firebase_test_lab_ios_xctest(
      gcp_project: 'AmazingAppUITests', # Your Google Cloud project name (ะบ ัั‚ะพะน ัั‚ั€ะพั‡ะบะต ะฒะตั€ะฝะตะผัั ะฟะพะทะถะต)
      devices: [                          # Device(s) to run tests on
        {
          ios_model_id: 'iphonex',        # Device model ID, see gcloud command above
          ios_version_id: '12.0',         # iOS version ID, see gcloud command above
          locale: 'en_US',                # Optional: default to en_US if not set
          orientation: 'portrait'         # Optional: default to portrait if not set
        }
      ]
    )

  end

CircleCI เชฎเชพเช‚ เชซเชพเชธเซเชŸเชฒเซ‡เชจ เชธเซ‡เชŸ เช•เชฐเชตเชพ เชตเชฟเชถเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃ เชฎเชพเชนเชฟเชคเซ€ เชฎเชพเชŸเซ‡, เชนเซเช‚ เชธเชคเซเชคเชพเชตเชพเชฐ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹ เชตเชพเช‚เชšเชตเชพเชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเซเช‚ เช›เซเช‚ เชเช•เชตเชพเชฐ, ะดะฒะฐ.

เช…เชฎเชพเชฐเชพ config.yml เชฎเชพเช‚ เชจเชตเซเช‚ เช•เชพเชฐเซเชฏ เช‰เชฎเซ‡เชฐเชตเชพเชจเซเช‚ เชญเซ‚เชฒเชถเซ‹ เชจเชนเซ€เช‚:

build-for-firebase-test-lab:
   macos:
     xcode: "10.1.0"   
   working_directory: ~/project
   shell: /bin/bash --login -o pipefail
   steps:
     - checkout
     - attach_workspace:
         at: ~/project
     - run: sudo bundle install     # ะพะฑะฝะพะฒะปัะตะผ ะทะฐะฒะธัะธะผะพัั‚ะธ
     - run:
         name: install gcloud-sdk   # ะฝะฐ mac ะผะฐัˆะธะฝัƒ ะฝะตะพะฑั…ะพะดะธะผะพ ัƒัั‚ะฐะฝะพะฒะธั‚ัŒ gcloud
         command: |
           ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null ; brew install caskroom/cask/brew-cask 2> /dev/null
           brew cask install google-cloud-sdk
     - run:
         name: build app for testing
         command: fastlane testing_build_for_firebase  # ะทะฐะฟัƒัะบะฐะตะผ lane ัะฑะพั€ะบะธ ะธ ะพั‚ะฟั€ะฐะฒะบะธ ะฒ firebase

4. เช…เชฎเชพเชฐเซ€ เชŸเซ‡เชธเซเชŸ เชฌเซ‡เชจเซเชš เชตเชฟเชถเซ‡ เชถเซเช‚? Firebase เชธเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ€เช.

เชšเชพเชฒเซ‹ เชจเซ€เชšเซ‡ เชฎเซ‡เชณเชตเซ€เช เช•เซ‡ เชฒเซ‡เช– เชถเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชฒเช–เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹.

เช•เชฆเชพเชš เชคเชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชซเซเชฐเซ€ เชชเซเชฒเชพเชจ เชชเชฐ Firebase เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เช…เชฅเชตเชพ เช•เชฆเชพเชš เชฌเชฟเชฒเช•เซเชฒ เชจเชนเซ€เช‚. เชคเซเชฏเชพเช‚ เช•เซ‹เชˆ เชฎเซ‚เชณเชญเซ‚เชค เชคเชซเชพเชตเชค เชจเชฅเซ€, เช•เชพเชฐเชฃ เช•เซ‡ เชชเชฐเซ€เช•เซเชทเชฃ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชคเซ‹ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เชเช• เชตเชฐเซเชทเชจเซ‹ เชฎเชซเชค เช‰เชชเชฏเซ‹เช— เชธเชพเชฅเซ‡ เชเช• เช…เชฒเช— เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเซ€ เชถเช•เซ€เช เช›เซ€เช (เช•เซ‚เชฒ, เชฌเชฐเชพเชฌเชฐ?)

เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ เช‡เชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐ เชเช•เชพเช‰เชจเซเชŸเชฎเชพเช‚ เชฒเซ‰เช— เช‡เชจ เช•เชฐเซ€เช เช›เซ€เช (เช…เชฅเชตเชพ เช…เชจเซเชฏ เช•เซ‹เชˆ, เชคเซ‡เชจเชพเชฅเซ€ เช•เซ‹เชˆ เชซเชฐเช• เชชเชกเชคเซ‹ เชจเชฅเซ€), เช…เชจเซ‡ เชœเชˆเช เช›เซ€เช เชซเชพเชฏเชฐเชฌเซ‡เช เช•เชจเซเชธเซ‹เชฒ เชชเซ‡เชœ. AmazingAppUITests เชจเชพเชฎเชจเซ‹ เชจเชตเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเซ‹.

เชคเซ‡ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡: เชฒเซ‡เชจ firebase_test_lab_ios_xctest เชฎเชพเช‚ Fastfile เชฎเชพเช‚ เช…เช—เชพเช‰เชจเชพ เชชเช—เชฒเชพเชฎเชพเช‚ gcp_project เชชเชฐเชฟเชฎเชพเชฃ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเชพ เชจเชพเชฎ เชธเชพเชฅเซ‡ เชฎเซ‡เชณ เช–เชพเชคเซเช‚ เชนเซ‹เชตเซเช‚ เชœเซ‹เชˆเช.

เช…เชฎเซ‡ เชซเชพเชฏเชฐเชฌเซ‡เช เชŸเซ‡เชธเซเชŸ เชฒเซ‡เชฌเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซเชฐเซเชฎเซ‡เชจเซเชŸเชฒ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเซ€เช เช›เซ€เช. เชญเชพเช— 1: iOS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ

เชกเชฟเชซเซ‰เชฒเซเชŸ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เช…เชฎเชจเซ‡ เช–เซ‚เชฌ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เช…เชจเซเช•เซ‚เชณ เช›เซ‡.

เชŸเซ‡เชฌ เชฌเช‚เชง เช•เชฐเชถเซ‹ เชจเชนเซ€เช‚, เชฎเชพเช‚ เชธเชฎเชพเชจ เช–เชพเชคเชพ เชนเซ‡เช เชณ เชจเซ‹เช‚เชงเชฃเซ€ เช•เชฐเซ‹ เชœเซ€เช•เซเชฒเชพเช‰เชก - เช† เชเช• เชœเชฐเซ‚เชฐเซ€ เชฎเชพเชช เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชซเชพเชฏเชฐเชฌเซ‡เช เชธเชพเชฅเซ‡ เชตเชพเชคเชšเซ€เชค gcloud เช•เชจเซเชธเซ‹เชฒ เช‡เชจเซเชŸเชฐเชซเซ‡เชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฅเชพเชฏ เช›เซ‡.

Google เชเช• เชตเชฐเซเชท เชฎเชพเชŸเซ‡ $300 เช†เชชเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡, เชœเซ‡ เช‘เชŸเซ‹เชŸเซ‡เชธเซเชŸ เช•เชฐเชตเชพเชจเชพ เชธเช‚เชฆเชฐเซเชญเชฎเชพเช‚ เชธเซ‡เชตเชพเชจเชพ เชฎเชซเชค เช‰เชชเชฏเซ‹เช—เชจเชพ เชเช• เชตเชฐเซเชท เชธเชฎเช•เช•เซเชท เช›เซ‡. เช…เชฎเซ‡ เชคเชฎเชพเชฐเซ€ เชšเซเช•เชตเชฃเซ€ เชฎเชพเชนเชฟเชคเซ€ เชฆเชพเช–เชฒ เช•เชฐเซ€เช เช›เซ€เช, $1 เชจเชพ เชŸเซ‡เชธเซเชŸ เชกเซ‡เชฌเชฟเชŸเชจเซ€ เชฐเชพเชน เชœเซเช“ เช…เชจเซ‡ เชคเชฎเชพเชฐเชพ เชเช•เชพเช‰เชจเซเชŸเชฎเชพเช‚ $300 เชชเซเชฐเชพเชชเซเชค เช•เชฐเซ‹. เชเช• เชตเชฐเซเชท เชชเช›เซ€, เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช†เชชเชฎเซ‡เชณเซ‡ เชฎเชซเชค เชŸเซ‡เชฐเชฟเชซ เชชเซเชฒเชพเชจเชฎเชพเช‚ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เชฅเชˆ เชœเชถเซ‡, เชคเซ‡เชฅเซ€ เชจเชพเชฃเชพเช‚เชจเซ€ เชธเช‚เชญเชตเชฟเชค เช–เซ‹เชŸ เชตเชฟเชถเซ‡ เชšเชฟเช‚เชคเชพ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€.

เชšเชพเชฒเซ‹ เชซเชพเชฏเชฐเชฌเซ‡เช เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเชพเชฅเซ‡ เชŸเซ‡เชฌ เชชเชฐ เชชเชพเช›เชพ เช†เชตเซ€เช เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชฌเซเชฒเซ‡เช เชŸเซ‡เชฐเชฟเชซ เชชเซเชฒเชพเชจเชฎเชพเช‚ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ€เช - เชนเชตเซ‡ เชœเซ‹ เชฎเชฐเซเชฏเชพเชฆเชพ เช“เชณเช‚เช—เชพเชˆ เชœเชพเชฏ เชคเซ‹ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช•เช‚เชˆเช• เชšเซ‚เช•เชตเชตเชพเชจเซเช‚ เช›เซ‡.

gcloud เช‡เชจเซเชŸเชฐเชซเซ‡เชธเชฎเชพเช‚, เช…เชฎเชพเชฐเซ‹ Firebase เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชชเชธเช‚เชฆ เช•เชฐเซ‹, "เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€" เชฎเซเช–เซเชฏ เชฎเซ‡เชจเซ‚ เช†เช‡เชŸเชฎ เชชเชธเช‚เชฆ เช•เชฐเซ‹ เช…เชจเซ‡ Cloud Testing API เช…เชจเซ‡ Cloud Tools Result API เช‰เชฎเซ‡เชฐเซ‹.

เช…เชฎเซ‡ เชซเชพเชฏเชฐเชฌเซ‡เช เชŸเซ‡เชธเซเชŸ เชฒเซ‡เชฌเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซเชฐเซเชฎเซ‡เชจเซเชŸเชฒ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเซ€เช เช›เซ€เช. เชญเชพเช— 1: iOS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ

เชชเช›เซ€ เชฎเซ‡เชจเซ เช†เช‡เชŸเชฎ โ€œIAM เช…เชจเซ‡ เชตเชนเซ€เชตเชŸโ€ -> เชธเชฐเซเชตเชฟเชธ เชเช•เชพเช‰เชจเซเชŸเซเชธ -> เชธเชฐเซเชตเชฟเชธ เชเช•เชพเช‰เชจเซเชŸ เชฌเชจเชพเชตเซ‹ เชชเชฐ เชœเชพเช“. เช…เชฎเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ เชธเช‚เชชเชพเชฆเชฟเชค เช•เชฐเชตเชพเชจเชพ เช…เชงเชฟเช•เชพเชฐเซ‹ เช†เชชเซ€เช เช›เซ€เช.

เช…เชฎเซ‡ เชซเชพเชฏเชฐเชฌเซ‡เช เชŸเซ‡เชธเซเชŸ เชฒเซ‡เชฌเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซเชฐเซเชฎเซ‡เชจเซเชŸเชฒ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเซ€เช เช›เซ€เช. เชญเชพเช— 1: iOS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ

JSON เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ API เช•เซ€ เชฌเชจเชพเชตเซ‹

เช…เชฎเซ‡ เชซเชพเชฏเชฐเชฌเซ‡เช เชŸเซ‡เชธเซเชŸ เชฒเซ‡เชฌเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซเชฐเซเชฎเซ‡เชจเซเชŸเชฒ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเซ€เช เช›เซ€เช. เชญเชพเช— 1: iOS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ

เช…เชฎเชจเซ‡ เชฅเซ‹เชกเชพ เชธเชฎเชฏ เชชเช›เซ€ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ‡เชฒ JSON เชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡, เชชเชฐเช‚เชคเซ เชนเชฎเชฃเชพเช‚ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เชŸเซ‡เชธเซเชŸ เชฒเซ‡เชฌ เชธเซ‡เชŸเช…เชชเชจเซ‡ เชชเซ‚เชฐเซเชฃ เช—เชฃเซ€เชถเซเช‚.

5. CircleCI เชจเซ€ เชธเซเชฅเชพเชชเชจเชพ

เชตเชพเชœเชฌเซ€ เชชเซเชฐเชถเซเชจ เชŠเชญเซ‹ เชฅเชพเชฏ เช›เซ‡ - เชชเชพเชธเชตเชฐเซเชกเซเชธ เชธเชพเชฅเซ‡ เชถเซเช‚ เช•เชฐเชตเซเช‚? เช…เชฎเชพเชฐเชพ เชฌเชฟเชฒเซเชก เชฎเชถเซ€เชจเชจเซ€ เชเชจเซเชตเชพเชฏเชฐเซเชจเชฎเซ‡เชจเซเชŸ เชตเซ‡เชฐเซ€เชเชฌเชฒ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎ เช…เชฎเชจเซ‡ เช…เชฎเชพเชฐเชพ เชชเชพเชธเชตเชฐเซเชกเซเชธ เช…เชจเซ‡ เช…เชจเซเชฏ เชธเช‚เชตเซ‡เชฆเชจเชถเซ€เชฒ เชกเซ‡เชŸเชพเชจเซ‡ เชธเซเชฐเช•เซเชทเชฟเชค เชฐเซ€เชคเซ‡ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเชถเซ‡. CircleCI เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชฎเชพเช‚, Environment Variables เชชเชธเช‚เชฆ เช•เชฐเซ‹

เช…เชฎเซ‡ เชซเชพเชฏเชฐเชฌเซ‡เช เชŸเซ‡เชธเซเชŸ เชฒเซ‡เชฌเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซเชฐเซเชฎเซ‡เชจเซเชŸเชฒ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเซ€เช เช›เซ€เช. เชญเชพเช— 1: iOS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ
เช…เชจเซ‡ เชจเซ€เชšเซ‡เชจเชพ เชšเชฒเซ‹ เชธเซ‡เชŸ เช•เชฐเซ‹:

  • เช•เซ€: GOOGLE_APPLICATION_CREDENTIALS
    เชฎเซ‚เชฒเซเชฏ: gcloud เชธเซ‡เชตเชพ เชเช•เชพเช‰เชจเซเชŸ เช•เซ€เชจเซ€ json เชซเชพเช‡เชฒเชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€
  • เช•เซ€: MATCH_PASSWORD
    เชฎเซ‚เชฒเซเชฏ: เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹ เชธเชพเชฅเซ‡ เช—เซ€เชฅเชฌ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ‡ เชกเชฟเช•เซเชฐเชฟเชชเซเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ‹ เชชเชพเชธเชตเชฐเซเชก
  • เช•เซ€: FASTLANE_PASSWORD
    เชฎเซ‚เชฒเซเชฏ: เชเชชเชฒ เชกเซ‡เชตเชฒเชชเชฐ เชชเซ‹เชฐเซเชŸเชฒ เชˆเชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐ เชเช•เชพเช‰เชจเซเชŸ เชชเชพเชธเชตเชฐเซเชก

เช…เชฎเซ‡ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชธเชพเชšเชตเซ€เช เช›เซ€เช, PR เชฌเชจเชพเชตเซ€เช เช›เซ€เช เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชธเชฎเซ€เช•เซเชทเชพ เชฎเชพเชŸเซ‡ เช…เชฎเชพเชฐเซ€ เชŸเซ€เชฎ เชฒเซ€เชกเชจเซ‡ เชฎเซ‹เช•เชฒเซ€เช เช›เซ€เช.

เชชเชฐเชฟเชฃเชพเชฎเซ‹

เช† เชธเชฐเชณ เชฎเซ‡เชจเชฟเชชเซเชฏเซเชฒเซ‡เชถเชจเซเชธเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‡, เช…เชฎเชจเซ‡ เชชเชฐเซ€เช•เซเชทเชฃ เชธเชฎเชฏเซ‡ เช‰เชชเช•เชฐเชฃ เชธเซเช•เซเชฐเซ€เชจ เชชเชฐ เชตเชฟเชกเชฟเช“ เชฐเซ‡เช•เซ‹เชฐเซเชก เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ เชธเชพเชฅเซ‡ เชเช• เชธเชพเชฐเซเช‚, เชธเซเชฅเชฟเชฐ เช•เชพเชฐเซเชฏเช•เชพเชฐเซ€ เชธเซเชŸเซ‡เชจเซเชก เชชเซเชฐเชพเชชเซเชค เชฅเชฏเซเช‚. เชชเชฐเซ€เช•เซเชทเชฃเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚, เชฎเซ‡เช‚ iPhone X เช‰เชชเช•เชฐเชฃ เชฎเซ‹เชกเซ‡เชฒเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซเชฏเซ‹ เช›เซ‡, เชชเชฐเช‚เชคเซ เชซเชพเชฐเซเชฎ เชตเชฟเชตเชฟเชง เชฎเซ‹เชกเซ‡เชฒเซ‹ เช…เชจเซ‡ iOS เชธเช‚เชธเซเช•เชฐเชฃเซ‹เชจเชพ เชธเช‚เชฏเซ‹เชœเชจเชฎเชพเช‚เชฅเซ€ เชธเชฎเซƒเชฆเซเชง เชชเชธเช‚เชฆเช—เซ€ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡.

เชฌเซ€เชœเซ‹ เชญเชพเช— เชเชจเซเชกเซเชฐเซ‹เช‡เชก เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เชซเชพเชฏเชฐเชฌเซ‡เช เชŸเซ‡เชธเซเชŸ เชฒเซ‡เชฌเชจเชพ เชธเซเชŸเซ‡เชช-เชฌเชพเชฏ-เชธเซเชŸเซ‡เชช เชธเซ‡เชŸเช…เชชเชจเซ‡ เชธเชฎเชฐเซเชชเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹