আমি এক্সকোড 6 বিটা 6 ব্যবহার করছি।
এটি এমন কিছু যা এখন কিছু সময়ের জন্য আমাকে তুচ্ছ করে চলেছে, তবে এটি এমন এক পর্যায়ে পৌঁছেছে যা এখন সবেমাত্র ব্যবহারযোগ্য।
আমার প্রকল্পে একটি শালীন আকারের 65 টি সুইফ্ট ফাইল এবং কয়েকটি ব্রিজযুক্ত অবজেক্টিভ-সি ফাইল (যা সত্যই সমস্যার কারণ নয়) হতে শুরু করছে।
দেখে মনে হচ্ছে যে কোনও সুইফট ফাইলের ক্ষেত্রে কোনও সামান্য পরিবর্তন (যেমন অ্যাপটিতে সবেমাত্র ব্যবহৃত ক্লাসে একটি সাধারণ সাদা স্থান যুক্ত করা) নির্দিষ্ট টার্গেটের জন্য পুরো সুইফট ফাইলগুলি পুনরায় সংমিশ্রিত করবে cause
গভীর তদন্তের পরে, আমি খুঁজে পেয়েছি যে সংকলক সময়টির প্রায় 100% সময় নিচ্ছে তা হ'ল CompileSwift
ধাপটি যেখানে Xcode swiftc
আপনার টার্গেটের সমস্ত সুইফট ফাইলগুলিতে কমান্ড চালায় ।
আমি আরও কিছু তদন্ত করেছি এবং আমি যদি কেবলমাত্র একটি ডিফল্ট নিয়ামকের সাথে অ্যাপের প্রতিনিধি রাখি তবে সংকলনটি খুব দ্রুত হয় তবে আমি আমার প্রকল্পের ফাইলগুলিকে আরও সংযুক্ত করার সাথে সাথে সংকলনের সময়টি সত্যিই ধীর হতে শুরু করেছিল।
এখন কেবল 65 টি উত্স ফাইল সহ, প্রতিবার সংকলন করতে এটি 8-10 সেকেন্ড সময় নেয়। মোটেও খুব তাড়াতাড়ি নয়।
আমি কোনো পোস্ট ছাড়া এই সমস্যা সম্পর্কে কথা বলা দেখা যায় না এই এক , কিন্তু তাই আমি হতাশ করছি যদি আমি শুধুমাত্র সেই ক্ষেত্রে এক নই এটি XCode 6. এর একটি পুরোনো সংস্করণ ছিল।
হালনাগাদ
আমি কয়েক সুইফট প্রকল্প পরীক্ষা করেছি GitHub মত Alamofire , ইউলার এবং CryptoSwift কিন্তু তাদের কেউ আসলে তুলনা করার জন্য যথেষ্ট সুইফট ফাইল ছিল। আমি যে একমাত্র প্রকল্পটি দেখতে পেয়েছিলাম যে একটি শালীন আকারের শুরু হয়েছিল তা ছিল সুইফটএন এবং এটিতে কেবল এক ডজন উত্স ফাইল ছিল আমি এখনও একই জিনিস যাচাই করতে সক্ষম হয়েছি, একটি সাধারণ স্থান এবং পুরো প্রকল্পটির পুনরায় সংশোধন প্রয়োজন যা একটি গ্রহণ শুরু করেছিল অল্প সময় (২/৩ সেকেন্ড)।
অবজেক্টিভ-সি কোডের তুলনায় যেখানে বিশ্লেষক এবং সংকলন উভয়ই দ্রুত জ্বলছে, এটি সত্যই মনে হচ্ছে সুইফট কখনও বড় প্রকল্পগুলি পরিচালনা করতে সক্ষম হবে না, তবে দয়া করে আমাকে বলুন যে আমি ভুল।
এক্সকোড 6 বিটা 7 সহ আপডেট করুন
এখনও কোন উন্নতি। এটি হাস্যকর হতে শুরু করছে। #import
সুইফ্টের অভাবের সাথে আমি সত্যিই দেখতে পাচ্ছি না যে অ্যাপল কীভাবে এইটিকে অনুকূল করতে সক্ষম হবে।
এক্সকোড 6.3 এবং সুইফট 1.2 দিয়ে আপডেট করুন
অ্যাপল ইনক্রিমেন্টাল বিল্ডস (এবং আরও অনেক সংকলক অপ্টিমাইজেশন) যুক্ত করেছে। এই সুবিধাগুলি দেখতে আপনাকে আপনার কোডটি সুইফট ১.২ এ মাইগ্রেট করতে হবে তবে অ্যাপল আপনাকে এটি করতে সহায়তা করার জন্য এক্সকোড a.৩ এ একটি সরঞ্জাম যুক্ত করেছে:
যাহোক
আমার মতো খুব তাড়াতাড়ি আনন্দ করো না। বিল্ড ইনক্রিমেন্টাল করতে তারা যে গ্রাফ সলভারটি ব্যবহার করেন তা এখনও খুব ভালভাবে অনুকূলিত হয়নি।
প্রকৃতপক্ষে, এটি ফাংশন স্বাক্ষর পরিবর্তনের দিকে লক্ষ্য করে না তাই আপনি যদি একটি পদ্ধতির ব্লকে কোনও স্থান যোগ করেন তবে class শ্রেণীর উপর নির্ভর করে সমস্ত ফাইল পুনরায় সংযুক্ত করা হবে।
দ্বিতীয়ত, এটি পরিবর্তনগুলি প্রভাবিত না করে এমন কি ফাইলগুলি পুনরায় সংযুক্ত করা হয়েছিল তার উপর ভিত্তি করে গাছটি তৈরি করেছে বলে মনে হচ্ছে। উদাহরণস্বরূপ, যদি আপনি এই তিনটি ক্লাসটি বিভিন্ন ফাইলগুলিতে সরান
class FileA: NSObject {
var foo:String?
}
class FileB: NSObject {
var bar:FileA?
}
class FileC: NSObject {
var baz:FileB?
}
এখন আপনি যদি সংশোধন করেন FileA
, সংকলক স্পষ্টতই FileA
পুনরায় সংযোগ করতে চিহ্নিত করবে । এছাড়া কম্পাইল হবে FileB
(যে পরিবর্তন উপর ভিত্তি করে ঠিক আছে হবে FileA
), কিন্তু এছাড়াও FileC
কারণ FileB
কারণ recompiled করা হয়, এবং যে বেশ খারাপ FileC
কখনোই ব্যবহার FileA
এখানে।
সুতরাং আমি আশা করি তারা সেই নির্ভরশীলতা গাছ সমাধানকারীকে উন্নতি করবে ... আমি এই নমুনা কোডটি দিয়ে একটি রাডার খুলেছি ।
এক্সকোড 7 বিটা 5 এবং সুইফট 2.0 দিয়ে আপডেট করুন
গতকাল অ্যাপল বিটা 5 প্রকাশ করেছে এবং রিলিজ নোটের ভিতরে আমরা দেখতে পেলাম:
সুইফট ল্যাঙ্গুয়েজ এবং কমপাইলার • বর্ধিত বিল্ডস: কোনও ফাংশনের কেবলমাত্র বডি পরিবর্তন করার ফলে আর নির্ভরযোগ্য ফাইলগুলি পুনরায় তৈরি করা উচিত নয়। (15352929)
আমি এটি চেষ্টা করে দেখেছি এবং অবশ্যই বলতে হবে এটি এখন সত্যিই (সত্যিই!) ভালভাবে কাজ করছে। তারা দ্রুতগতির ইনক্রিমেন্টাল বিল্ডগুলি ব্যাপকভাবে অনুকূল করেছে optim
আমি আপনাকে একটি swift2.0
শাখা তৈরি করার এবং এক্স কোড 7 বিটা ব্যবহার করে আপনার কোডটি আপ টু ডেট রাখার পরামর্শ দিচ্ছি You
এক্সকোড 8.2 দিয়ে আপডেট করুন
এই বিষয়টিতে আমার শেষ আপডেটের পরে কিছুক্ষণ হয়ে গেছে তাই এখানে।
আমাদের অ্যাপ্লিকেশনটি এখন প্রায় একচেটিয়া সুইফট কোডের প্রায় 20k লাইন, যা শালীন তবে অসামান্য। এটি দ্রুত 2 এবং দ্রুত 3 মাইগ্রেশনের মধ্য দিয়ে গেছে। ২০১৪ সালের মাঝামাঝি ম্যাকবুক প্রো (2.5 গিগাহার্টজ ইন্টেল কোর আই 7) সংকলন করতে প্রায় 5/6 মি লাগবে যা একটি পরিষ্কার বিল্ডে ঠিক আছে।
তবে বর্ধমান বিল্ড আপেল দাবি করা সত্ত্বেও একটি রসিকতা রয়েছে:
যখন কেবলমাত্র ছোট পরিবর্তন ঘটে থাকে তখন এক্সকোড একটি সম্পূর্ণ লক্ষ্য পুনর্নির্মাণ করে না। (28892475)
স্পষ্টতই আমি মনে করি আমাদের অনেকেই এই বকাঝকাটি পরীক্ষা করার পরে হেসে ফেলেছিলেন (আমার প্রকল্পের যে কোনও ফাইলের জন্য একটি ব্যক্তিগত (ব্যক্তিগত!) সম্পত্তি যুক্ত করে পুরো জিনিসটি পুনরায় সংকলন করবে ...)
আমি আপনাকে বলছি অ্যাপল বিকাশকারী ফোরামে এই থ্রেডের দিকে ইঙ্গিত করতে চাই যাতে ইস্যুটি সম্পর্কে আরও কিছু তথ্য রয়েছে (পাশাপাশি কিছুক্ষণের মধ্যে এ বিষয়ে অ্যাপল দেব যোগাযোগের প্রশংসাও করা হয়েছে)
মূলত লোকেরা ইনক্রিমেন্টাল বিল্ডকে উন্নত করার চেষ্টা করার জন্য কয়েকটি জিনিস নিয়ে এসেছে:
- এতে একটি
HEADER_MAP_USES_VFS
প্রকল্প সেটিং সেট করুনtrue
Find implicit dependencies
আপনার স্কিম থেকে অক্ষম করুন- একটি নতুন প্রকল্প তৈরি করুন এবং আপনার ফাইলগুলি হায়ারার্কিকে নতুনটিতে সরিয়ে দিন।
আমি সমাধান 3 চেষ্টা করব তবে সমাধান 1/2 আমাদের পক্ষে কার্যকর হয়নি।
এই পুরো পরিস্থিতিতে হাস্যকর মজার বিষয়টি হ'ল আমরা প্রথম সংকলনটি স্লোনেসে পৌঁছেছিলাম এবং এই মুহূর্তে অ্যাপল দের আসল উন্নতি সত্ত্বেও প্রায় দুই বছর পরে আমি বিশ্বাস করি যে আমরা সুইফট 1 বা সুইফট 1.1 কোডটি ব্যবহার করে এই ইস্যুতে প্রথম পোস্টটি দেখছি believe এক্সকোড with-এর মতো পরিস্থিতি ঠিক তত খারাপ How
আমি আসলে প্রকৃতই দৈনন্দিন হতাশা এটা জড়িত কারণ আমাদের প্রকল্পের জন্য OBJ / সি ওভার সুইফট নির্বাচন দু: খ প্রকাশ। (আমি এমনকি অ্যাপকোডে স্যুইচ করেছি তবে এটি অন্য গল্প)
যাইহোক আমি দেখি যে এই এসও পোস্টটিতে এই লেখাটি 32K + ভিউ এবং 143 টি আপস রয়েছে তাই আমি অনুমান করি যে আমি একমাত্র নই। এই পরিস্থিতি নিয়ে নিরাশাবাদী হওয়া সত্ত্বেও সেখানে থাকা ছেলেরা টানেলের শেষে কিছুটা আলোকপাত হতে পারে।
আপনার যদি সময় থাকে (এবং সাহস!) আমি অনুমান করি অ্যাপল রাডারকে এই সম্পর্কে স্বাগত জানায়।
পরের বার তিল! চিয়ার্স
এক্সকোড 9 দিয়ে আপডেট করুন
আজ এই হোঁচট খাচ্ছি । এক্সকোড চুপচাপ বর্তমানের ভয়াবহ পারফরম্যান্সের উন্নতির জন্য একটি নতুন বিল্ড সিস্টেম চালু করেছে। ওয়ার্কস্পেস সেটিংসের মাধ্যমে আপনাকে এটি সক্ষম করতে হবে।
এখনও চেষ্টা করে দেখেছেন তবে শেষ হয়ে গেলে এই পোস্টটি আপডেট করবেন। যদিও প্রতিশ্রুতিবদ্ধ।