مان فاسٽ لين استعمال ڪندي موبائل ايپس لاءِ مسلسل انضمام ۽ ترسيل بابت ڳالهائڻ چاهيان ٿو. اسان سڀني موبائل ايپليڪيشنن تي CI/CD کي ڪيئن لاڳو ڪريون ٿا، اسان اتي ڪيئن پهتاسين ۽ آخر ۾ ڇا ٿيو.
ٽول تي نيٽ ورڪ تي اڳ ۾ ئي ڪافي مواد موجود آهي، جنهن جي شروعات ۾ اسان وٽ ايتري کوٽ هئي، تنهن ڪري مان عمدي طور تي اوزار کي تفصيل سان بيان نه ڪندس، پر صرف ان جو حوالو ڏيندس جيڪو اسان وٽ هو:
بدقسمتي سان، هن وقت تائين صرف اسان جي ڊولپرز کي خبر هئي ته اهي اسڪرپٽ ڪيئن ڪم ڪن ٿا ۽ چاٻين جي هن لامحدود اسٽيڪ جي ضرورت ڇو آهي، ۽ جڏهن ڪجهه ٻيهر ڀڄي ويو، انهن کي "خوبصورت شام" حاصل ڪيو لاگ ان جي تجزيو لاء.
سال 2017
هن سال اسان سکيو آهي ته فاسٽ لين وانگر هڪ شيء آهي. ايتري ڄاڻ نه هئي جيتري هاڻي آهي- هڪ ڪيئن شروع ڪجي، ڪيئن استعمال ڪجي. ۽ اهو اوزار پاڻ ان وقت اڃا به خام هو: مسلسل غلطيون صرف اسان کي مايوس ڪن ٿيون ۽ اهو يقين ڪرڻ ڏکيو هو ته انهن جادوگر خودڪار طريقي سان واعدو ڪيو.
بهرحال، فاسٽ لين ڪور ۾ شامل مکيه افاديت آهن gym и pilot، اسان ان کي شروع ڪرڻ ۾ ڪامياب ٿي ويا آهيون.
انهن کي بهتر ڪيو ويو آهي، جيڪڏهن صرف ان لاءِ نه ته سڀني معيارن لاءِ ضروري آهي xcodebuild، توهان کي اشارو ڪرڻو پوندو - gym آزاديءَ سان سمجھندو ڪٿي ۽ ڇا ڪوڙ. ۽ وڌيڪ فائن ٽيوننگ لاءِ، توھان بيان ڪري سگھوٿا ساڳيون چابيون جيئن ۾ xcodebuild، صرف ڪنجين جو نالو واضح آهي.
هن ڀيري، جم ۽ تعمير ٿيل xcpretty فارميٽ جي مهرباني، تعمير لاگ تمام گهڻو وڌيڪ جائز ٿي چڪا آهن. اهو ٽٽل اسيمبلين کي درست ڪرڻ تي وقت بچائڻ شروع ڪيو، ۽ ڪڏهن ڪڏهن ڇڏڻ واري ٽيم ان کي پنهنجو پاڻ تي سمجهي سگهي ٿي.
بدقسمتي سان، اسيمبلي جي رفتار جي ماپ xcodebuild и gym اسان اهو نه ڪيو، پر اسان دستاويزن تي ڀروسو ڪنداسين - 30٪ رفتار تائين.
سڀني ايپليڪيشنن لاء اڪيلو عمل
سال 2018 ۽ موجوده
2018 تائين، ايپليڪيشنن جي تعمير ۽ رولنگ جو عمل مڪمل طور تي جينڪنز ڏانهن منتقل ڪيو ويو، ڊولپرز انهن جي مشينن کي ڇڏڻ کان روڪي ڇڏيو، ۽ صرف ڇڏڻ واري ٽيم کي ڇڏڻ جو حق هو.
اسان اڳ ۾ ئي ٽيسٽ ۽ جامد تجزيو جي شروعات کي بهتر بڻائڻ چاهيون ٿا، ۽ اسان جا اسڪرپٽ وڌندا ۽ وڌندا ويا. اسان جي ايپليڪيشنن سان گڏ وڌو ۽ تبديل ڪيو. ان وقت اٽڪل 10 ايپليڪيشنون هيون، انهي ڳالهه تي غور ڪندي ته اسان وٽ ٻه پليٽ فارم آهن، جيڪي 20 "رهندڙ" اسڪرپٽ آهن.
هر دفعي اسان اسڪرپٽ ۾ نئون قدم شامل ڪرڻ چاهيون ٿا، اسان کي سڀني شيل اسڪرپٽ ۾ ٽڪرا ڪاپي پيسٽ ڪرڻو پوندو. ٿي سگهي ٿو ته اسان وڌيڪ احتياط سان ڪم ڪري سگهون ها، پر اڪثر اهڙيون تبديليون ٽائپس ۾ ختم ٿي وينديون آهن، جيڪي شام ۾ تبديل ٿي وينديون آهن ته رليز ٽيم لاءِ اسڪرپٽس کي درست ڪرڻ ۽ معلوم ڪرڻ لاءِ ته ڪهڙي سمارٽ ماڻهو هي ڪمانڊ شامل ڪيو آهي ۽ اهو اصل ۾ ڇا ڪندو آهي. عام طور تي، اهو نه ٿو چئي سگهجي ته هڪ پليٽ فارم لاء اسيمبليء جي لکت گهٽ ۾ گهٽ ڪجهه ساڳيا هئا. جيتوڻيڪ اهي ضرور ائين ئي ڪندا هئا.
نئين ايپليڪيشن لاءِ هڪ عمل شروع ڪرڻ لاءِ، انهن اسڪرپٽ جو ”تازو“ ورجن چونڊڻ لاءِ هڪ ڏينهن گذارڻ ضروري هو، ان کي ڊيبگ ڪريو ۽ چئو ته ”ها، اهو ڪم ڪري ٿو.
۽ جيڪڏهن توهان تفصيل ۾ نه وڃو، ڪارناما ۾ استعمال ڪيل چابمن کي ختم ڪندي، توهان هي فاسٽ فائل حاصل ڪندا:
default_platform(:ios)
platform :ios do
before_all do
unlock
end
desc "Build stage"
lane :build do
match
prepare_build
gym
end
desc "Prepare build stage: carthage and cocoapods"
lane :prepare_build do
pathCartfile = ""
Dir.chdir("..") do
pathCartfile = File.join(Dir.pwd, "/Cartfile")
end
if File.exist?(pathCartfile)
carthage
end
pathPodfile = ""
Dir.chdir("..") do
pathPodfile = File.join(Dir.pwd, "/Podfile")
end
if File.exist?(pathPodfile)
cocoapods
end
end
desc "Test stage"
lane :test do
scan
xcov
end
desc "Sonar stage (after run test!)"
lane :run_sonar do
slather
lizard
swiftlint
sonar
end
desc "Deploy to testflight stage"
lane :deploy do
pilot
end
desc "Unlock keychain"
private_lane :unlock do
pass = ENV['KEYCHAIN_PASSWORD']
unlock_keychain(
password: pass
)
end
end
حقيقت ۾، اسان جي پهرين فاسٽ فائل بدمعاشي ٿي، ڪجهه بيچين تي غور ڪندي جيڪي اسان کي اڃا تائين گهربل هئا ۽ انهن پيٽرولن جو تعداد جيڪو اسان متبادل ڪيو:
lane :build do
carthage(
command: "update",
use_binaries: false,
platform: "ios",
cache_builds: true)
cocoapods(
clean: true,
podfile: "./Podfile",
use_bundle_exec: false)
gym(
workspace: "MyApp.xcworkspace",
configuration: "Release",
scheme: "MyApp",
clean: true,
output_directory: "/build",
output_name: "my-app.ipa")
end
lane :deploy do
pilot(
username: "[email protected]",
app_identifier: "com.example.app",
dev_portal_team_id: "TEAM_ID_NUMBER_DEV",
team_id: "ITS_TEAM_ID")
end
مٿين مثال ۾، صرف پيٽرولر جو حصو جيڪو اسان کي بيان ڪرڻ جي ضرورت آهي: اهي تعميراتي پيٽرولر آهن - اسڪيما، ترتيب، روزي جي پروفائل جا نالا، گڏوگڏ ورهائڻ جا پيرا ميٽرز - ايپل آئي ڊي ڊولپر اڪائونٽ، پاسورڊ، ايپليڪيشن ID، ۽ پوء تي. پهرين تقريبن جي طور تي، اسان انهن سڀني ڪنجين کي خاص فائلن ۾ رکون ٿا - Gymfile, Matchfile и Appfile.
هاڻي جينڪنز ۾ توهان مختصر حڪمن کي ڪال ڪري سگهو ٿا جيڪي ڏسڻ کي ڌمڪيون نه ڏيندا آهن ۽ اکين سان آساني سان پڙهي سگهندا آهن:
توکي ڇا مليو؟ هر قدم لاء حڪم صاف ڪريو. صاف ٿيل اسڪرپٽ، صاف طور تي ترتيب ڏنل فاسٽ لين فائلن ۾. خوش ٿي، اسان ڊولپرز ڏانهن ڊوڙيا ته انهن کي هر شيءِ شامل ڪرڻ لاءِ چيو جيڪي انهن کي گهربل آهن انهن جي ذخيرن ۾.
پر وقت گذرڻ سان اسان محسوس ڪيو ته اسان کي به ساڳين مشڪلاتن کي منهن ڏيڻو پوندو - اسان وٽ اڃا به 20 اسمبلي اسڪرپٽ هوندا جيڪي هڪ نه ٻئي طريقي سان پنهنجي زندگي گذارڻ شروع ڪندا، انهن کي ايڊٽ ڪرڻ وڌيڪ ڏکيو هوندو، ڇاڪاڻ ته اسڪرپٽ مخزن ڏانهن منتقل ٿي ويندا. ۽ اسان کي اتي رسائي نه هئي. ۽، عام طور تي، اسان جي درد کي هن طريقي سان حل ڪرڻ ممڪن نه ٿيندو.
ٽاسڪ #2: حاصل ڪريو ھڪڙو فاسٽ فائل N ايپليڪيشنن لاءِ
هاڻي اهو لڳي ٿو ته مسئلو حل ڪرڻ ايترو ڏکيو نه آهي - متغير مقرر ڪريو، ۽ اچو ته وڃو. ها، حقيقت ۾، اهو ڪيئن مسئلو حل ڪيو ويو آهي. پر ان وقت جڏهن اسان ان کي خراب ڪيو، اسان کي نه ته فاسٽ لين ۾ مهارت هئي، نه روبي ۾، جنهن ۾ فاسٽ لين لکيو ويو آهي، ۽ نه ئي نيٽ ورڪ تي مفيد مثال - هرڪو جيڪو فاسٽ لين بابت لکيو هو، پوء صرف هڪ ايپليڪيشن لاء هڪ مثال تائين محدود هو. هڪ ڊولپر.
Fastlane ماحوليات جي متغيرن کي سنڀالي سگھي ٿو، ۽ اسان اڳ ۾ ئي ڪوشش ڪئي آھي Keychain پاسورڊ قائم ڪندي:
ENV['KEYCHAIN_PASSWORD']
اسان جي اسڪرپٽ کي ڏسڻ کان پوء، اسان عام حصن جي نشاندهي ڪئي:
#for build, test and deploy
APPLICATION_SCHEME_NAME=appScheme
APPLICATION_PROJECT_NAME=app.xcodeproj
APPLICATION_WORKSPACE_NAME=app.xcworkspace
APPLICATION_NAME=appName
OUTPUT_IPA_NAME=appName.ipa
#app info
APP_BUNDLE_IDENTIFIER=com.example.appName
[email protected]
TEAM_ID=ABCD1234
FASTLANE_ITC_TEAM_ID=123456789
هاڻي، فاسٽ لين فائلن ۾ انهن ڪيز کي استعمال ڪرڻ شروع ڪرڻ لاءِ، اسان کي اهو معلوم ڪرڻو پوندو ته انهن کي اتي ڪيئن پهچائڻو آهي. Fastlane هن لاء هڪ حل آهي: dotenv ذريعي متغير لوڊ ڪندي. دستاويز چوي ٿو ته جيڪڏهن اهو ضروري آهي ته توهان مختلف مقصدن لاء چابيون لوڊ ڪرڻ لاء، فاسٽ لين ڊاريڪٽري ۾ ڪيترن ئي ترتيبن جون فائلون ٺاهيون. .env, .env.default, .env.development.
۽ پوءِ اسان فيصلو ڪيو ته هن لائبريري کي ٿوري مختلف طريقي سان استعمال ڪيو وڃي. اچو ته ڊولپرز جي مخزن ۾ رکون فاسٽ لين اسڪرپٽس ۽ ان جي ميٽا معلومات کي نه، پر فائل ۾ هن ايپليڪيشن جون منفرد ڪنجيون .env.appName.
سمجهيو ويو آهي Fastfile, Appfile, Matchfile и Gymfile، اسان ان کي الڳ مخزن ۾ لڪايو. ٻين خدمتن کان پاس ورڊ چاٻين سان گڏ هڪ اضافي فائل اتي لڪيل هئي - .env.
توھان ھڪڙو مثال ڏسي سگھو ٿا هتي.
CI تي، ڪال گهڻو تبديل نه ڪيو ويو آهي، هڪ مخصوص ايپليڪيشن لاء هڪ ترتيب واري چيڪ شامل ڪئي وئي آهي:
ھن حل کي ھاڻي لاءِ ڇڏي ڏنو، جيتوڻيڪ فاسٽلين وٽ فاسٽ فائل ذريعي ڊائون لوڊ ڪرڻ جو حل آھي عملimport_from_git، پر اهو صرف Fastfile لاءِ ڪم ڪري ٿو، پر ٻين فائلن لاءِ نه. جيڪڏھن توھان چاھيو ٿا "واقعي خوبصورت"، توھان پنھنجو پاڻ لکي سگھو ٿا action.
ساڳيو سيٽ اينڊرائيڊ ايپليڪيشنز ۽ ري ايڪٽ نيٽ لاءِ ٺاهيو ويو، فائلون ساڳي مخزن ۾ آهن، پر مختلف شاخن ۾ iOS, android и react_native.
جڏهن رليز ٽيم ڪجهه نئون قدم شامل ڪرڻ چاهي ٿي، اسڪرپٽ ۾ تبديليون ايم آر ذريعي گٽ ۾ رڪارڊ ڪيون وينديون آهن، هاڻي ٽوٽل اسڪرپٽ جي مجرمن کي ڳولڻ جي ڪا ضرورت ناهي، ۽ عام طور تي، هاڻي توهان کي ان کي ٽوڙڻ جي ڪوشش ڪرڻو پوندو.
هاڻي اها پڪ آهي
اڳي، اسان وقت گذاريو سڀني اسڪرپٽ کي برقرار رکڻ، انهن کي تازه ڪاري ڪرڻ ۽ اپڊيٽ جي سڀني نتيجن کي درست ڪرڻ. اها ڏاڍي مايوسي هئي جڏهن غلطين جا سبب ۽ رليز ۾ ٽائيم ٽائيم سادو ٽائپس هئا جيڪي شيل اسڪرپٽ جي جمل ۾ ٽريڪ رکڻ تمام ڏکيو هئا. هاڻي اهڙيون غلطيون گهٽ ۾ گهٽ ٿي ويون آهن. تبديليون هڪ ئي وقت ۾ سڀني ايپليڪيشنن ۾ شامل ڪيون وينديون آهن. ۽ اهو 15 منٽ وٺندو آهي هڪ نئين ايپليڪيشن کي پروسيس ۾ رکڻ لاءِ - سيٽ اپ ڪريو ٽيمپليٽ پائپ لائن CI تي ۽ چابيون شامل ڪريو ڊولپر جي مخزن ۾.
اهو لڳي ٿو ته فاسٽ فائل لاءِ Android ۽ ايپليڪيشن جي دستخط اڻڄاتل رهي ٿو، جيڪڏهن مضمون دلچسپ آهي، مان هڪ تسلسل لکندس. مان توهان جا سوال يا تجويزون ڏسي خوش ٿي ويندس "توهان اهو مسئلو ڪيئن حل ڪندا" تبصرن ۾ يا ٽيليگرام تي bashkirova.