এখনও পর্যন্ত রাস্তা
আমার ব্যবহারের ক্ষেত্রে এটি ছিল:
- আমি সংস্করণটি সিঙ্ক্রোনাইজ করছি এবং বেশ কয়েকটি লক্ষ্যবস্তুতে সংখ্যা তৈরি করছি।
- আমি সংস্করণটি সিঙ্ক্রোনাইজ করছি এবং লক্ষ্যগুলির সাথে সংখ্যা তৈরি করছি
Settigns.bundle
- আমি সিআই সার্ভার থেকে বিল্ড নম্বরটি পড়ছি এবং সংশোধন করছি।
আমি টার্গেট বিল্ড স্ক্রিপ্ট হিসাবে পয়েন্ট 1 এবং 2 এবং সিআইতে নিজেই কাস্টম স্ক্রিপ্ট হিসাবে পয়েন্ট 3 চালিত করতাম।
এক্সকোড বিল্ড সেটিংসের মধ্যে সংস্করণ সংরক্ষণ এবং বিল্ড করার নতুন উপায়টি স্ক্রিপ্টগুলির সাথে সমস্যা সৃষ্টি করেছিল, কারণ তারা কার্যকরভাবে মানগুলি সংশোধন করতে সক্ষম হয় নি। কমপক্ষে পড়া সম্ভব ছিল।
দুর্ভাগ্যক্রমে আমি এক্সকোডটিকে সংস্করণ সংরক্ষণ করতে এবং প্রজেক্ট বিল্ড সেটিংসে সংখ্যা তৈরি করতে বাধা দেওয়ার একটি বৈধ উপায় আবিষ্কার করতে সক্ষম হইনি, তবে আমি একটি কার্যনির্বাহ তৈরি করতে সক্ষম হয়েছি।
দেখা যাচ্ছে যে যখন কোনও বিল্ড বা সংরক্ষণাগার তৈরি করা হয় তখন এতে লেখা মানটি Info.plist
ব্যবহার করা হয়। এর অর্থ হ'ল বিল্ড সময় চলাকালীন মানটি প্রতিস্থাপিত হয় যা আমাদের একই বিল্ড সময়কালে এটি পরিবর্তন করতে দেয় না।
আমি xcodeproj
ক্লাইটি ব্যবহার করে প্রকল্পটি সংশোধন করার চেষ্টাও করেছি , তবে প্রকল্পে যে কোনও পরিবর্তন ঘটে যাওয়ায় কোনও বিল্ড বন্ধ হয়ে গেছে, সুতরাং এই সমাধানটি কাজ করছে না।
অবশেষে, আমি চেষ্টা করেছি এমন অনেকগুলি ভিন্ন পদ্ধতির পরে, আমি শেষ পর্যন্ত এমন একটি আপস খুঁজে পেয়েছি যা এক্সকোডের নতুন আচরণ লঙ্ঘন করছে না।
সংক্ষিপ্ত উত্তর:
লক্ষ্য প্রাক-ক্রিয়া হিসাবে, একটি স্ক্রিপ্ট কার্যকর করা হয় যা লক্ষ্যটির CFBundleShortVersionString
এবং তার সাথে সম্পর্কিত মানগুলি লিখে দেয়CFBundleVersion
Info.plist
সত্যের উত্স হিসাবে, আমি পছন্দসই লক্ষ্যটির মান MARKETING_VERSION
এবং পড়ার জন্য এক্সকোড বিল্ড সেটিংস ব্যবহার করি CURRENT_PROJECT_VERSION
।
এইভাবে, আপনি যখন প্রজেক্ট সেটিংস থেকে মানগুলি সংশোধন করেন - পরবর্তী বিল্ড / সংরক্ষণাগার উপর - সেগুলিতে লিখিত হবে Info.plist
, আপনার বিদ্যমান স্ক্রিপ্টিং যুক্তিটি যদি কাজ চালিয়ে যাওয়ার অনুমতি দেয় তবে তা কোনওটিকেই অনুমতি দেয়।
বিস্তারিত উত্তর
কোনও বিল্ড অ্যাকশনের মাধ্যমে কোনও সংস্থান পরিবর্তন করার একমাত্র উপায় হ'ল pre-action
স্ক্রিপ্ট ব্যবহার using যদি আপনি এটি কোনও বিল্ড স্ক্রিপ্ট থেকে করার চেষ্টা করেন - পরিবর্তনগুলি তাত্ক্ষণিকভাবে কার্যকর হবে না এবং বিল্ড / সংরক্ষণাগারটির শেষে উপস্থিত হবে না।
প্রাক-বিল্ড অ্যাকশন যুক্ত করতে - স্কিম সম্পাদনা করতে যান।
তারপরে বিল্ড এবং আর্কাইভ বিভাগগুলি প্রসারিত করুন। এর অধীনে Pre-action
, Provide build and settings from
ড্রপডাউন ক্লিক করুন এবং সত্য টার্গেটের উত্সটি নির্বাচন করুন যা থেকে আপনি মানগুলি পড়তে চান।
নিম্নলিখিত স্ক্রিপ্ট যুক্ত করুন:
# 1)
cd ${PROJECT_DIR}
# 2)
exec > Pruvit-Int.prebuild.sync_project_version_and_build_with_info_plists.log 2>&1
# 3)
./sync_project_version_and_build_with_info_plists.sh $MARKETING_VERSION $CURRENT_PROJECT_VERSION
স্ক্রিপ্ট লাইনগুলি নিম্নলিখিতটি করে:
- সিঙ্ক স্ক্রিপ্টটি কার্যকর করতে সেই ডিরেক্টরিতে যান
- প্রাক-ক্রিয়া চলাকালীন কোনও লগ লিখতে অনুমতি দেয়, অন্যথায় কোনও আউটপুট ডিফল্টরূপে নিঃশব্দ হয়ে যায়
MARKETING_VERSION
এবং সরবরাহ করে সিঙ্ক স্ক্রিপ্ট কার্যকর করুনCURRENT_PROJECT_VERSION
চূড়ান্ত পদক্ষেপটি হ'ল আপনার নিজস্ব সিঙ্ক স্ক্রিপ্টটি লিখুন যা প্রদত্তের মানগুলি MARKETING_VERSION
এবং CURRENT_PROJECT_VERSION
স্বতন্ত্র লক্ষ্য / গুলি এবং যখনই আপনি চাইবেন সেগুলি পড়বে।
আমার ক্ষেত্রে লিপিটি নিম্নলিখিত:
#!/bin/bash
#IMPORTANT - this script must run as pre-action of each target's Build and Archive actions
version_number=$1
build_number=$2
echo "version_number is $version_number"
echo "build_number is $build_number"
#update Pruvit/Info.plist
pruvitInfoPlist="Pruvit/Info.plist"
/usr/libexec/PlistBuddy -c "Set CFBundleShortVersionString $version_number" $pruvitInfoPlist
/usr/libexec/PlistBuddy -c "Set CFBundleVersion $build_number" $pruvitInfoPlist
#update Pruvit/Settings.bundle
settingsPlist="Pruvit/Settings.bundle/Root.plist"
/usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:0:DefaultValue $version_number" $settingsPlist
/usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $build_number" $settingsPlist
#update BadgeCounter/Info.plist
badgeCounterInfoPlist="BadgeCounter/Info.plist"
/usr/libexec/PlistBuddy -c "Set CFBundleShortVersionString $version_number" $badgeCounterInfoPlist
/usr/libexec/PlistBuddy -c "Set CFBundleVersion $build_number" $badgeCounterInfoPlist
আমি ভাগ Info.plist
এবং Settings.bundle
আমার অ্যাপ্লিকেশন লক্ষ্য উভয়ের মধ্যে ব্যবহার করি, তাই আমাকে এটি একবার আপডেট করতে হবে।
এছাড়াও আমি একটি বিজ্ঞপ্তি পরিষেবা এক্সটেনশন ব্যবহার করি BadgeCounter
, যার ঠিক একই সংস্করণ থাকতে হবে এবং এটি এমবেড করা লক্ষ্য হিসাবে তৈরি করতে হবে। সুতরাং আমি পাশাপাশি এটি আপডেট।