میرا نام دمتری ہے، میں کمپنی میں ٹیسٹر کے طور پر کام کرتا ہوں۔
اس سے پہلے، میں نے Android کے لیے Firebase Test Lab کو پہلے ہی آزمایا تھا اور واقعی میں سب کچھ پسند آیا، اس لیے میں نے پروجیکٹ کے iOS ٹیسٹ انفراسٹرکچر کو اسی بنیاد پر رکھنے کی کوشش کرنے کا فیصلہ کیا۔ مجھے بہت زیادہ گوگل کرنا پڑا اور سب کچھ پہلی بار کام نہیں کرتا تھا، لہذا میں نے ان لوگوں کے لیے ایک سبق آموز مضمون لکھنے کا فیصلہ کیا جو ابھی تک جدوجہد کر رہے ہیں۔
لہذا، اگر آپ کے پاس iOS پروجیکٹ پر UI ٹیسٹ ہیں، تو آپ انہیں آج ہی حقیقی آلات پر چلانے کی کوشش کر سکتے ہیں، برائے مہربانی Good Corporation کی طرف سے فراہم کردہ۔ دلچسپی رکھنے والوں کے لیے بلی میں خوش آمدید۔
کہانی میں، میں نے کچھ ابتدائی ڈیٹا - GitHub اور CircleCI بلڈ سسٹم پر ایک نجی ذخیرہ بنانے کا فیصلہ کیا۔ درخواست کا نام AmazingApp ہے، bundleID com.company.amazingapp ہے۔ میں یہ ڈیٹا فوری طور پر پیش کرتا ہوں تاکہ بعد میں ہونے والی الجھن کو کم کیا جا سکے۔
اگر آپ نے اپنے پروجیکٹ میں کچھ حل مختلف طریقے سے نافذ کیے ہیں، تو تبصروں میں اپنا تجربہ شیئر کریں۔
1. خود ٹیسٹ
UI ٹیسٹ کے لیے ایک نئی پروجیکٹ برانچ بنائیں:
$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”
آئیے پروجیکٹ کو XCode میں کھولیں اور UI ٹیسٹوں کے ساتھ ایک نیا ہدف بنائیں [XCode -> File -> New -> Target -> iOS Testing Bundle]، اسے خود وضاحتی نام AmazingAppUITests دیتے ہیں۔
بنائے گئے ٹارگٹ کے بلڈ فیز سیکشن پر جائیں اور ٹارگٹ ڈیپینڈینسیز کی موجودگی کو چیک کریں - AmazingApp، Compile Sources - AmazingAppUITests.swift میں۔
ایک اچھا عمل یہ ہے کہ مختلف تعمیراتی اختیارات کو الگ الگ اسکیموں میں الگ کیا جائے۔ ہم اپنے UI ٹیسٹوں کے لیے ایک اسکیم بناتے ہیں [XCode -> Product -> Scheme -> New Scheme] اور اسے وہی نام دیتے ہیں: AmazingAppUITests۔
بنائی گئی اسکیم کی تعمیر میں مرکزی ایپلیکیشن کا ہدف شامل ہونا چاہیے - AmazingApp اور Target UI ٹیسٹ - AmazingAppUITests - اسکرین شاٹ دیکھیں
اگلا، ہم UI ٹیسٹوں کے لیے ایک نئی بلڈ کنفیگریشن بناتے ہیں۔ ایکس کوڈ میں، پروجیکٹ فائل پر کلک کریں اور انفارمیشن سیکشن میں جائیں۔ "+" پر کلک کریں اور ایک نئی کنفیگریشن بنائیں، مثال کے طور پر XCtest۔ جب کوڈ پر دستخط کرنے کی بات آتی ہے تو ہمیں دف کے ساتھ ناچنے سے بچنے کے لیے مستقبل میں اس کی ضرورت ہوگی۔
آپ کے پروجیکٹ میں کم از کم تین اہداف ہیں: بنیادی ایپلیکیشن، یونٹ ٹیسٹ (آخر کار، وہ موجود ہیں، ٹھیک ہے؟) اور ہدف UI ٹیسٹ جو ہم نے بنائے ہیں۔
Target AmazingApp، Build Settings tab، Code Signing Identity سیکشن پر جائیں۔ XCtest کنفیگریشن کے لیے، iOS ڈیولپر کو منتخب کریں۔ کوڈ سائننگ اسٹائل سیکشن میں، مینوئل کو منتخب کریں۔ ہم نے ابھی تک پروویژننگ پروفائل نہیں بنایا ہے، لیکن ہم اس پر تھوڑی دیر بعد ضرور واپس آئیں گے۔
Target AmazingAppUITests کے لیے ہم ایسا ہی کرتے ہیں، لیکن پروڈکٹ بنڈل آئیڈینٹیفائر کالم میں ہم com.company.amazingappuitest درج کرتے ہیں۔
2. ایپل ڈویلپر پروگرام میں ایک پروجیکٹ ترتیب دینا
ایپل ڈویلپر پروگرام کے صفحے پر جائیں، سرٹیفکیٹس، شناخت کنندگان اور پروفائلز سیکشن پر جائیں اور پھر شناخت کنندہ آئٹم کے ایپ آئی ڈی کالم پر جائیں۔ AmazingAppUITests اور bundleID com.company.amazingappuitest کے نام سے ایک نئی ایپ ID بنائیں۔
اب ہمارے پاس ایک علیحدہ سرٹیفکیٹ کے ساتھ اپنے ٹیسٹوں پر دستخط کرنے کا موقع ہے، لیکن... ٹیسٹنگ کے لیے بلڈ کو جمع کرنے کے طریقہ کار میں خود ایپلیکیشن کو اسمبل کرنا اور ٹیسٹ رنر کو اسمبل کرنا شامل ہے۔ اسی مناسبت سے، ہمیں ایک پروویژننگ پروفائل کے ساتھ دو بنڈل آئی ڈیز پر دستخط کرنے کے مسئلے کا سامنا ہے۔ خوش قسمتی سے، ایک سادہ اور خوبصورت حل ہے - وائلڈ کارڈ ایپ آئی ڈی۔ ہم ایک نئی ایپ آئی ڈی بنانے کے طریقہ کار کو دہراتے ہیں، لیکن واضح ایپ آئی ڈی کے بجائے، اسکرین شاٹ کی طرح وائلڈ کارڈ ایپ آئی ڈی کو منتخب کریں۔
اس وقت، ہم developer.apple.com کے ساتھ کام کر چکے ہیں، لیکن ہم براؤزر ونڈو کو کم سے کم نہیں کریں گے۔ چلو چلتے ہیں
ایک دھیان رکھنے والے قاری نے دیکھا کہ اس یوٹیلیٹی کو استعمال کرنے کے لیے ہمیں ایک پرائیویٹ ریپوزٹری اور ایپل ڈویلپر پروگرام اور گیتھب دونوں تک رسائی کے ساتھ ایک اکاؤنٹ کی ضرورت ہوگی۔ ہم فارم کا اکاؤنٹ بناتے ہیں (اگر اچانک ایسی کوئی چیز نہیں ہے) [ای میل محفوظ]، ایک مضبوط پاس ورڈ کے ساتھ آئیں، اسے developer.apple.com کے ساتھ رجسٹر کریں، اور اسے بطور پروجیکٹ ایڈمنسٹریٹر مقرر کریں۔ اس کے بعد، ہم اکاؤنٹ کو آپ کی کمپنی کے گیتھب ریپوزٹری تک رسائی دیتے ہیں اور AmazingAppMatch جیسے نام کے ساتھ ایک نیا پرائیویٹ ریپوزٹری بناتے ہیں۔
3. فاسٹ لین اور میچ یوٹیلیٹی کو ترتیب دینا
ایک ٹرمینل کھولیں، پروجیکٹ کے ساتھ فولڈر میں جائیں اور فاسٹ لین کو شروع کریں جیسا کہ اشارہ کیا گیا ہے۔
$ fastlane init
آپ کو دستیاب استعمال کنفیگریشنز کو منتخب کرنے کے لیے کہا جائے گا۔ چوتھا آپشن منتخب کریں - دستی پروجیکٹ سیٹ اپ۔
پروجیکٹ میں ایک نئی ڈائریکٹری فاسٹ لین ہے، جس میں دو فائلیں ہیں - ایپ فائل اور فاسٹ فائل۔ مختصراً، ہم Appfile میں سروس ڈیٹا اسٹور کرتے ہیں، اور Fastfile میں جابز لکھتے ہیں، جسے Fastlane کی اصطلاح میں لین کہتے ہیں۔ میں سرکاری دستاویزات کو پڑھنے کی سفارش کرتا ہوں:
ایپ فائل کو اپنے پسندیدہ ٹیکسٹ ایڈیٹر میں کھولیں اور اسے درج ذیل فارم پر لائیں:
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
ہم اسے بالکل اسی طرح پُر کرتے ہیں اگر ہم مستقبل میں کریشلیٹکس اور/یا AppStore میں ڈسپلے کے لیے تعمیرات پر دستخط کرنے کے لیے میچ کا استعمال کرنا چاہتے ہیں، یعنی آپ کی درخواست کے بنڈل 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
اور ہم دیکھتے ہیں کہ کس طرح فاسٹ لین نے ایک نیا سرٹیفکیٹ بنایا اور اسے ذخیرہ میں رکھا۔ زبردست!
ایکس کوڈ کھولیں۔ اب ہمارے پاس Match Development com.company.* فارم کا ضروری پروویژننگ پروفائل ہے، جسے AmazingApp اور AmazingAppUITests کے اہداف کے لیے پروویژننگ پروفائل سیکشن میں بتانا ضروری ہے۔
ٹیسٹوں کو جمع کرنے کے لیے لین کو شامل کرنا باقی ہے۔ چلو چلتے ہیں
آئیے اصل مثال سے کاپی پیسٹ کریں تاکہ ہماری لین 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
سرکل سی آئی میں فاسٹ لین قائم کرنے کے بارے میں مکمل معلومات کے لیے، میں آفیشل دستاویزات کو پڑھنے کی تجویز کرتا ہوں۔
ہمارے 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 ترتیب دیا جا رہا ہے۔
آئیے نیچے آتے ہیں کہ مضمون کس لیے لکھا گیا تھا۔
شاید آپ کی ایپ فائر بیس کو مفت پلان پر استعمال کرتی ہے، یا شاید بالکل نہیں۔ اس میں قطعی طور پر کوئی بنیادی فرق نہیں ہے، کیونکہ جانچ کی ضروریات کے لیے ہم ایک سال کے مفت استعمال کے ساتھ ایک الگ پروجیکٹ بنا سکتے ہیں (ٹھیک ہے، ٹھیک ہے؟)
ہم اپنے انفراسٹرکچر اکاؤنٹ میں لاگ ان ہوتے ہیں (یا کوئی اور، اس سے کوئی فرق نہیں پڑتا)، اور جاتے ہیں۔
اہم: Fastfile in lane firebase_test_lab_ios_xctest میں پچھلے مرحلے میں gcp_project پیرامیٹر پروجیکٹ کے نام سے مماثل ہونا چاہئے۔
پہلے سے طے شدہ ترتیبات ہمارے ساتھ بہت اچھی طرح سے سوٹ کرتی ہیں۔
ٹیب کو بند نہ کریں، اسی اکاؤنٹ کے تحت اندراج کریں۔
گوگل ایک سال کے لیے $300 دے رہا ہے، جو آٹو ٹیسٹ کرنے کے تناظر میں سروس کے مفت استعمال کے ایک سال کے برابر ہے۔ ہم آپ کی ادائیگی کی معلومات درج کرتے ہیں، $1 کے ٹیسٹ ڈیبٹ کا انتظار کریں اور آپ کے اکاؤنٹ میں $300 وصول کریں۔ ایک سال کے بعد، پروجیکٹ خود بخود ایک مفت ٹیرف پلان میں منتقل ہو جائے گا، اس لیے رقم کے ممکنہ نقصان کے بارے میں فکر کرنے کی ضرورت نہیں ہے۔
آئیے فائربیس پروجیکٹ کے ساتھ ٹیب پر واپس آتے ہیں اور اسے بلیز ٹیرف پلان میں منتقل کرتے ہیں - اب ہمارے پاس کچھ ادا کرنا ہے اگر حد سے تجاوز ہو جائے۔
gcloud انٹرفیس میں، ہمارا Firebase پروجیکٹ منتخب کریں، "ڈائریکٹری" مین مینو آئٹم کو منتخب کریں اور Cloud Testing API اور Cloud Tools Result API شامل کریں۔
پھر مینو آئٹم "IAM اور انتظامیہ" -> سروس اکاؤنٹس -> سروس اکاؤنٹ بنائیں پر جائیں۔ ہم پروجیکٹ میں ترمیم کرنے کے حقوق دیتے ہیں۔
JSON فارمیٹ میں ایک API کلید بنائیں
ہمیں تھوڑی دیر بعد ڈاؤن لوڈ کردہ JSON کی ضرورت ہوگی، لیکن ابھی کے لیے ہم ٹیسٹ لیب کے سیٹ اپ کو مکمل سمجھیں گے۔
5. سرکل سی آئی کا قیام
ایک معقول سوال پیدا ہوتا ہے - پاس ورڈ کے ساتھ کیا کرنا ہے؟ ہماری تعمیراتی مشین کا ماحولیاتی متغیر طریقہ کار ہمارے پاس ورڈز اور دیگر حساس ڈیٹا کو محفوظ طریقے سے ذخیرہ کرنے میں ہماری مدد کرے گا۔ CircleCI پروجیکٹ سیٹنگز میں، Environment Variables کو منتخب کریں۔
اور درج ذیل متغیرات مرتب کریں:
- کلید: GOOGLE_APPLICATION_CREDENTIALS
قدر: gcloud سروس اکاؤنٹ کلید کی json فائل کے مشمولات - کلید: MATCH_PASSWORD
قدر: سرٹیفکیٹ کے ساتھ گیتھب ریپوزٹری کو ڈکرپٹ کرنے کے لیے پاس ورڈ - کلید: FASTLANE_PASSWORD
قدر: ایپل ڈویلپر پورٹل انفراسٹرکچر اکاؤنٹ کا پاس ورڈ
ہم تبدیلیوں کو محفوظ کرتے ہیں، ایک PR بناتے ہیں اور اسے جائزہ کے لیے اپنی ٹیم لیڈ کو بھیجتے ہیں۔
کے نتائج
ان آسان ہیرا پھیری کے نتیجے میں، ہمیں ٹیسٹنگ کے وقت ڈیوائس اسکرین پر ویڈیو ریکارڈ کرنے کی صلاحیت کے ساتھ ایک اچھا، مستحکم ورکنگ سٹینڈ ملا۔ ٹیسٹ کی مثال میں، میں نے آئی فون ایکس ڈیوائس ماڈل کی وضاحت کی، لیکن فارم مختلف ماڈلز اور iOS ورژن کے امتزاج سے بھرپور انتخاب فراہم کرتا ہے۔
دوسرا حصہ اینڈرائیڈ پروجیکٹ کے لیے فائر بیس ٹیسٹ لیب کے مرحلہ وار سیٹ اپ کے لیے وقف کیا جائے گا۔
ماخذ: www.habr.com