ʻO Dmitry koʻu inoa, hana wau ma ke ʻano he mea hoʻāʻo ma ka hui
Ma mua o kēia, ua hoʻāʻo wau i ka Firebase Test Lab no Android a makemake nui i nā mea āpau, no laila ua hoʻoholo wau e hoʻāʻo e kau i ka ʻōnaehana hoʻāʻo ʻo iOS o ka papahana ma ka wāwae like. Pono wau iā Google a ʻaʻole pono nā mea a pau i ka manawa mua, no laila ua hoʻoholo wau e kākau i kahi ʻatikala aʻo no ka poʻe e hakakā nei.
No laila, inā loaʻa iā ʻoe nā hoʻokolohua UI ma kahi papahana iOS, hiki iā ʻoe ke hoʻāʻo e holo iā lākou ma nā polokalamu maoli i kēia lā, hāʻawi ʻia e Good Corporation. No ka poʻe hoihoi, hoʻokipa i ka pōpoki.
Ma ka moʻolelo, ua hoʻoholo wau e kūkulu ma luna o kekahi mau ʻikepili mua - kahi waihona pilikino ma GitHub a me ka ʻōnaehana kūkulu CircleCI. ʻO AmazingApp ka inoa noi, ʻo bundleID ʻo com.company.amazingapp. Hōʻike koke wau i kēia ʻikepili e hōʻemi i ka huikau ma hope.
Inā ʻokoʻa kāu hoʻokō ʻana i kekahi mau hoʻonā i kāu papahana, e kaʻana like i kāu ʻike ma nā manaʻo.
1. ʻO nā hoʻāʻo iā lākou iho
E hana i lālā papahana hou no nā hoʻokolohua UI:
$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”
E wehe mākou i ka papahana ma XCode a hana i kahi Target hou me nā ho'āʻo UI [XCode -> File -> New -> Target -> iOS Testing Bundle], hāʻawi iā ia i ka inoa wehewehe ponoʻī AmazingAppUITests.
E hele i ka ʻāpana Build Phases o ka Target i hana ʻia a nānā i ke kū ʻana o Target Dependencies - AmazingApp, ma Compile Sources - AmazingAppUITests.swift.
ʻO kahi hana maikaʻi ʻo ka hoʻokaʻawale ʻana i nā koho kūkulu ʻokoʻa i loko o nā Papahana kaʻawale. Hana mākou i kahi hoʻolālā no kā mākou ho'āʻo UI [XCode -> Product -> Scheme -> New Scheme] a hāʻawi iā ia i ka inoa like: AmazingAppUITests.
Pono ke kūkulu ʻia o ka papahana i hana ʻia i ka Target o ka noi nui - AmazingApp a me Target UI ho'āʻo - AmazingAppUITests - e ʻike i ka screenshot.
A laila, hana mākou i kahi hoʻonohonoho kūkulu hou no nā hoʻokolohua UI. Ma XCode, kaomi i ka faila papahana a hele i ka ʻike ʻāpana. Kaomi ma ka "+" a hana i kahi hoʻonohonoho hou, no ka laʻana XCtest. Pono mākou i kēia i ka wā e hiki mai ana i mea e pale aku ai i ka hula me ka pahu kani i ke kau inoa ʻana.
Aia ma kahi o ʻekolu mau Pahuhopu ma kāu papahana: ʻo ka noi nui, nā hoʻāʻo ʻāpana (ma hope o nā mea a pau, aia lākou, pololei?) a me nā hoʻokolohua Target UI a mākou i hana ai.
E hele i Target AmazingApp, Build Settings tab, Code Signing Identity section. No ka hoʻonohonoho XCtest, koho IOS Developer. Ma ka mahele Code Signing Style, koho Manual. ʻAʻole mākou i hana i kahi moʻolelo hoʻolako i kēia manawa, akā e hoʻihoʻi mākou iā ia ma hope iki.
No Target AmazingAppUITests hana like mākou, akā ma ka kolamu Product Bundle Identifier komo mākou i com.company.amazingappuitests.
2. Hoʻonohonoho i kahi papahana ma ka Apple Developer Program
E hele i ka ʻaoʻao ʻo Apple Developer Program, e hele i ka ʻāpana palapala hōʻoia, identifiers & Profiles a laila i ka kolamu App ID o ka mea Identifiers. E hana i kahi ID App hou i kapa ʻia ʻo AmazingAppUITests a me bundleID com.company.amazingappuitests.
I kēia manawa ua loaʻa iā mākou ka manawa e hoʻopaʻa inoa i kā mākou mau hoʻokolohua me kahi palapala ʻokoʻa, akā ... ʻO ke kaʻina hana no ka hoʻohui ʻana i kahi kūkulu no ka hoʻāʻo ʻana e pili ana i ka hoʻohui ʻana i ka noi ponoʻī a me ka hui ʻana i ka mea holo hoʻāʻo. No laila, ke alo nei mākou i ka pilikia o ke kau inoa ʻana i ʻelua pūʻulu ID me hoʻokahi ʻaoʻao hoʻolako. ʻO ka mea pōmaikaʻi, aia kahi hopena maʻalahi a nani - Wildcard App ID. Hana hou mākou i ke kaʻina hana no ka hana ʻana i kahi ID App hou, akā ma kahi o Explicit App ID, koho i ka Wildcard App ID e like me ka kiʻi.
I kēia manawa, ua pau kā mākou hana pū me developer.apple.com, akā ʻaʻole mākou e hōʻemi i ka puka aniani. E hele kāua i
Ua ʻike ka mea heluhelu heluhelu e hoʻohana i kēia pono pono mākou i kahi waihona pilikino a me kahi moʻokāki me ke komo ʻana i ka Apple Developer Program a me Github. Hana mākou (inā ʻaʻohe mea like) kahi moʻolelo o ke ʻano [pale ʻia ka leka uila], e kiʻi mai i kahi ʻōlelo huna ikaika, e hoʻopaʻa inoa me developer.apple.com, a koho iā ia i luna hoʻomalu papahana. A laila, hāʻawi mākou i ka moʻokāki i ka waihona github o kāu hui a hana i kahi waihona pilikino hou me kahi inoa e like me AmazingAppMatch.
3. Hoʻonohonoho i ka Fastlane a me ka pono hoʻokūkū
E wehe i kahi pahu, e hele i ka waihona me ka papahana a hoʻomaka i ka fastlane e like me ka mea i hōʻike ʻia
$ fastlane init
E koi ʻia ʻoe e koho i nā hoʻonohonoho hoʻohana i loaʻa. E koho i ka hā o ka koho - manual project setup.
Loaʻa i ka papahana kahi papa kuhikuhi wikiwiki hou, aia nā faila ʻelua - Appfile a me Fastfile. Ma kahi pōkole, mālama mākou i ka ʻikepili lawelawe ma Appfile, a kākau i nā hana ma Fastfile, i kapa ʻia nā alahele ma Fastlane terminology. Manaʻo wau e heluhelu i ka palapala kūhelu:
E wehe i ka Appfile i kāu mea hoʻoponopono kikokikona punahele a lawe mai i kēia ʻano:
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
Hoʻi mākou i ka terminal a e like me ka manual official e hoʻomaka mākou e hoʻonohonoho i ka hoʻokūkū.
$ fastlane match init
$ fastlane match development
A laila, e hoʻokomo i ka ʻikepili i noi ʻia - waihona, moʻokāki, password, etc.
He nui no: Ke hoʻomaka mua ʻoe i ka pono hoʻokūkū, e noi ʻia ʻoe e hoʻokomo i kahi ʻōlelo huna e hoʻokaʻawale i ka waihona. He mea nui e mālama i kēia ʻōlelo huna; pono mākou i ka hoʻonohonoho ʻana i ka kikowaena CI!
Ua ʻike ʻia kahi faila hou ma ka waihona wikiwiki - Matchfile. E wehe iā ia i kāu mea hoʻoponopono kikokikona punahele a hōʻike e like me kēia:
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
Hoʻopiha pololei mākou iā ia inā makemake mākou e hoʻohana i ka pāʻani i ka wā e hiki mai ana e kau inoa i nā kūkulu no ka hōʻike ʻana ma Crashlytics a / a i ʻole AppStore, ʻo ia hoʻi, e kau inoa i ka pūʻulu ID o kāu noi.
Akā, e like me kā mākou e hoʻomanaʻo nei, ua hana mākou i kahi ID Wildcard kūikawā e hoʻopaʻa inoa i ka kūkulu hoʻāʻo. No laila, wehe i ka Fastfile a komo i kahi ala hou:
lane :testing_build_for_firebase do
match(
type: "development",
readonly: true,
app_identifier: "com.company.*",
git_branch: "uitests" # создаем отдельный бранч для development сертификата для подписи тестовой сборки.
)
end
E mālama a komo i loko o ka pahu
fastlane testing_build_for_firebase
a ʻike mākou i ka hana ʻana o fastlane i kahi palapala hōʻoia hou a waiho i loko o ka waihona. Nui!
Wehe XCode. I kēia manawa ua loaʻa iā mākou ka ʻaoʻao hoʻolako pono o ke ʻano Match Development com.company.*, pono e kuhikuhi ʻia ma ka ʻaoʻao Provisioning profile no nā pahuhopu AmazingApp a me AmazingAppUITests.
Ke hoʻomau nei e hoʻohui i ke ala no ka hoʻohui ʻana i nā hoʻokolohua. E hele kāua i
E kope-paʻi kāua mai ka laʻana kumu i hiki ai i kā mākou alana testing_build_for_firebase e like me kēia:
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
No ka ʻike piha e pili ana i ka hoʻonohonoho ʻana i ka fastlane ma CircleCI, manaʻo wau e heluhelu i ka palapala mana
Mai poina e hoʻohui i kahi hana hou i kā mākou 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. Pehea kā mākou papa hoʻāʻo? Hoʻonohonoho ʻia ʻo Firebase.
E iho kākou i ka mea i kākau ʻia ai ka ʻatikala.
Hoʻohana paha kāu polokalamu iā Firebase ma kahi hoʻolālā manuahi, a ʻaʻole paha. ʻAʻohe ʻokoʻa koʻikoʻi, no ka mea no ka hoʻāʻo ʻana e hiki iā mākou ke hana i kahi papahana ʻokoʻa me ka makahiki o ka hoʻohana manuahi (ʻoluʻolu, pololei?)
Hoʻokomo mākou i kā mākou moʻokāki waiwai (a i ʻole nā mea ʻē aʻe, ʻaʻole pili), a hele i
He nui no: Ma ka ʻanuʻu mua ma ka Fastfile ma ke ala firebase_test_lab_ios_xctest pono e hoʻohālikelike ka ʻāpana gcp_project me ka inoa o ka papahana.
Ua kūpono nā hoʻonohonoho paʻamau iā mākou.
Mai pani i ka pā, e hoʻopaʻa inoa ma lalo o ka moʻokāki like ma
Hāʻawi ʻo Google i $300 no hoʻokahi makahiki, ʻo ia ma ke ʻano o ka hana ʻana i nā autotests e like me ka makahiki o ka hoʻohana manuahi ʻana i ka lawelawe. Hoʻokomo mākou i kāu ʻike uku, kali no ka hōʻaiʻē hōʻike o $1 a loaʻa iā $300 i kāu moʻokāki. Ma hope o hoʻokahi makahiki, e hoʻoneʻe ʻia ka papahana i kahi hoʻolālā uku manuahi, no laila ʻaʻohe pono e hopohopo e pili ana i ka nalowale o ke kālā.
E hoʻi kāua i ka pā me ka papahana Firebase a hoʻololi iā ia i ka hoʻolālā uku Blaze - i kēia manawa he mea kā mākou e uku inā ʻoi aku ka palena.
Ma ka interface gcloud, koho i kā mākou papahana Firebase, e koho i ka "Directory" mea papa kuhikuhi nui a hoʻohui i ka Cloud Testing API a me Cloud Tools Result API.
A laila e hele i ka papa kuhikuhi "IAM a me ka hoʻokele" -> Nā moʻokāki lawelawe -> E hana i kahi moʻokāki lawelawe. Hāʻawi mākou i nā kuleana e hoʻoponopono i ka papahana.
E hana i kahi kī API ma ke ʻano JSON
Pono mākou i ka JSON i hoʻoiho ʻia ma hope iki, akā i kēia manawa e noʻonoʻo mākou i ka hoʻonohonoho hoʻonohonoho Test Lab.
5. Hoʻonohonoho i ka CircleCI
He nīnau kūpono - he aha ka hana me nā ʻōlelo huna? E kōkua ka mīkini hoʻololi kaiapuni o kā mākou mīkini kūkulu iā mākou e mālama pono i kā mākou ʻōlelo huna a me nā ʻikepili koʻikoʻi ʻē aʻe. Ma nā hoʻonohonoho papahana CircleCI, koho i nā ʻano hoʻololi kaiapuni
A hoʻonohonoho i nā ʻano like ʻole:
- kī: GOOGLE_APPLICATION_CREDENTIALS
waiwai: nā mea o ka waihona json o ke kī moʻokāki lawelawe gcloud - kī: MATCH_PASSWORD
waiwai: ʻōlelo huna no ka wehe ʻana i ka waihona github me nā palapala hōʻoia - kī: FASTLANE_PASSWORD
waiwai: Apple Developer Portal infrastructure account password
Mālama mākou i nā loli, hana i kahi PR a hoʻouna i kā mākou alakaʻi hui no ka loiloi.
Nā hopena
Ma muli o kēia mau manipulations maʻalahi, ua loaʻa iā mākou kahi kūlana hana paʻa maikaʻi me ka hiki ke hoʻopaʻa i ka wikiō ma ka pale o ka mea i ka manawa o ka hoʻāʻo. I ka laʻana hoʻāʻo, ua kuhikuhi wau i ka hiʻohiʻona iPhone X, akā hāʻawi ka mahiʻai i kahi koho waiwai mai ka hui pū ʻana o nā ʻano like ʻole a me nā mana iOS.
E hoʻolaʻa ʻia ka ʻāpana ʻelua i ka hoʻonohonoho ʻana i kēlā me kēia pae o Firebase Test Lab no kahi papahana Android.
Source: www.habr.com