এক্সকোড 11 খুব বেশি সংশোধন করে


12

এক্সকোড ১১ আমার সম্পূর্ণ প্রকল্পটি পুনরায় সংশোধন করছে (প্রায়?), এমনকি যদি আমি কেবল একটি স্থানীয় বেসরকারী ভেরিয়েবল পরিবর্তন করি, বা স্থানীয় স্কোপে স্থিরতার মান পরিবর্তন করি, এমনকি কখনও কখনও স্থানীয় ব্যক্তিগত ফাংশন স্কোপেও। প্রত্যাশার সাথে সাথে আমি দ্রুত বিল্ডগুলির সাথে 2 বা 3 টি পরিবর্তন আনতে পারি, তবে শীঘ্রই পর্যাপ্ত পরিমাণে আবার সবকিছু পুনরায় সংকলনের সিদ্ধান্ত নিয়েছে (যা খুব বেশি সময় নেয়)।

কোন ধারণা কি চলছে? এক্সকোড কি পরিবর্তন হয়েছে তা নির্ধারণ করতে সক্ষম নয়, কেন এটি এত অন্যান্য জিনিস (এমনকি অন্যান্য মডিউলগুলি) পুনরায় সংকলন করে।

কোন পরামর্শ অত্যন্ত প্রশংসা করা হয়, ধন্যবাদ!


2
আমি পরামর্শ দেব: নিশ্চিত করুন যে আপনি ডিগ্রগ বিল্ডগুলি ইনক্রিমেন্টাল বিল্ডিং দিয়ে করছেন, পুরো মডিউল অপ্টিমাইজেশন নয় not ডেরিভডটা ছাড়ুন এবং সাফ করুন। এবং এক্সকোড ১১.৪ এ আপডেট করুন, এটি কখনও কখনও এত দ্রুত সংকলন করে আমি এমনকি এটি ঘটতে দেখি না।
ম্যাট

1
এই থ্রেড আপনার প্রশ্নের উত্তর দিতে পারে: stackoverflow.com/questions/25537614/...
Endanke

এটি অত্যন্ত প্রকল্প নির্ভর, এটি কী চলছে তার উপর বিল্ড লগ বিশ্লেষণ করতে হবে। আমি এক্সকোড 11.2+ এর সাথে এই জাতীয় আচরণটি পর্যবেক্ষণ করি না, যখন খুব বড় প্রকল্প রয়েছে। আপনি কি কোনওভাবে আপনার প্রকল্পের উত্সগুলিতে অ্যাক্সেস সরবরাহ করবেন, অন্যথায় সমস্ত পরামর্শ মূর্খ?
এস্পেরি

লিগ্যাসি বিল্ড সিস্টেমের সম্পত্তিটি যাচাই করুন, আপনি যদি
সাবমডিউলগুলি

উত্তর:


8

আমাদের একই সমস্যা ছিল এবং আমরা এটি ঠিক করেছি। দুবার।

বর্ধিত বিল্ড (একই বিল্ড মেশিন):

আগে: m 10m পরে: ~ 35s

কীভাবে?

প্রথমে আমাদের অভিজ্ঞতা দিয়ে শুরু করা যাক। আমাদের একটি বিশাল সুইফট / ওবজে-সি প্রকল্প ছিল এবং এটিই ছিল মূল উদ্বেগ: বিল্ডিংয়ের সময়গুলি ধীর ছিল এবং একটি নতুন বৈশিষ্ট্য (আক্ষরিক) বাস্তবায়নের জন্য আপনাকে একটি নতুন প্রকল্প তৈরি করতে হয়েছিল। নিখরচায় সিনট্যাক্স হাইলাইট করার জন্য বোনাস পয়েন্ট।

তত্ত্ব

সত্যিকার অর্থে এটি সমাধান করতে আপনাকে বিল্ড সিস্টেম কীভাবে কাজ করে তা সত্যই বুঝতে হবে । উদাহরণস্বরূপ, আসুন এই কোড স্নিপেট চেষ্টা করুন:

import FacebookSDK
import RxSwift
import PinLayout

এবং কল্পনা করুন যে আপনি আপনার ফাইলটিতে এই সমস্ত আমদানি ব্যবহার করেন। এবং এই ফাইলটি অন্য একটি ফাইলেও নির্ভর করে যা অন্য লাইব্রেরির উপর নির্ভর করে যা ফলস্বরূপ অন্য লাইব্রেরি ইত্যাদি ব্যবহার করে etc.

সুতরাং আপনার ফাইলটি সংকলনের জন্য এক্সকোডকে আপনার উল্লিখিত প্রতিটি লাইব্রেরি এবং প্রতিটি ফাইলের উপর নির্ভরশীল সংকলন করতে হবে, সুতরাং আপনি যদি কোনও "কোর" ফাইল পরিবর্তন করেন তবে এক্সকোডকে আক্ষরিকভাবে পুরো প্রকল্পটি পুনর্নির্মাণ করতে হবে।

নির্ভরতা গাছ

এক্সকোড বিল্ডটি বহু-থ্রেডযুক্ত তবে এতে অনেকগুলি একক থ্রেডযুক্ত গাছ রয়েছে

সুতরাং প্রতিটি ইনক্রিমেন্টাল বিল্ডের প্রথম ধাপে এক্সকোড সিদ্ধান্ত নিচ্ছে কোন ফাইলগুলি পুনরায় সংকলন করতে হবে এবং একটি এএসটি ট্রি তৈরি করবে । আপনি যদি এমন কোনও ফাইল পরিবর্তন করেন যা অন্যান্য ফাইলগুলিতে " নির্ভরযোগ্য " হিসাবে কাজ করে, সুতরাং " নির্ভরশীল " হিসাবে কাজ করে এমন প্রতিটি ফাইল পুনরায় সংযুক্ত করতে হবে।

সংযোজন

তাই প্রথম পরামর্শটি হ'ল কাপলিং কম করা । আপনার প্রকল্পের অংশগুলি একে অপরের থেকে স্বতন্ত্র থাকতে হবে।

ওবজে-সি / সুইফ্ট ব্রিজ

এই গাছগুলিতে সমস্যা যদি আপনি ওবজ-সি / সুইফ্ট ব্রিজ ব্যবহার করেন তবে এক্সকোডকে স্বাভাবিকের চেয়ে আরও বেশি পর্যায় অতিক্রম করতে হবে:

নিখুঁত পৃথিবী:

  1. ওবজে-সি কোড তৈরি করে
  2. সুইফট কোড তৈরি করুন

সুইফট / ওবজ-সি ব্রিজ

ওবজে-সি / সুইফট ব্রিজ:

  1. [পুনরাবৃত্তিযোগ্য পদক্ষেপ] ওবিজে-সি কোড সংকলনের জন্য প্রয়োজনীয় সুইফট কোড তৈরি করুন
  2. [পুনরাবৃত্তিযোগ্য পদক্ষেপ] ওবিজে-সি কোড তৈরি করুন, যা সুইফ্ট কোডটি সংকলনের জন্য প্রয়োজন
  3. আপনার অবিশ্বাস্য সুইফট ও ওবজে-সি কোড বাকি না হওয়া পর্যন্ত 1 এবং 2 পুনরাবৃত্তি করুন
  4. ওবজে-সি কোড তৈরি করুন
  5. সুইফট কোড তৈরি করুন

ওবজে-সি / সুইফ্ট ব্রিজ

সুতরাং আপনি যদি পদক্ষেপ 1 বা 2 থেকে কিছু পরিবর্তন করেন তবে আপনি মূলত কোনও সমস্যায় রয়েছেন। সবচেয়ে ভাল সমাধান হ'ল ওবজে-সি / সুইফট ব্রিজটি হ্রাস করুন (এবং এটি আপনার প্রকল্প থেকে সরিয়ে দিন)।

আপনার যদি ওবজে-সি / সুইফ্ট ব্রিজ না থাকে তবে এটি দুর্দান্ত এবং আপনি পরবর্তী ধাপে যেতে ভাল:

সুইফট প্যাকেজ ম্যানেজার

সুইফ্ট পিএম এ যাওয়ার সময় (বা কমপক্ষে আপনার কোকোপডগুলি আরও ভালভাবে কনফিগার করা উচিত)।

কথাটি হ'ল, বেশিরভাগ ফ্রেমওয়ার্কগুলি ডিফল্ট কোকোপডস কনফিগারেশন সহ তাদের নিজের সাথে টানা অনেকগুলি জিনিস আপনার প্রয়োজন হয় না।

এটি পরীক্ষার জন্য খালি একটি পিনলয়েটের মতো নির্ভরতার সাথে একটি প্রকল্প তৈরি করুন উদাহরণস্বরূপ এবং কোকোপডস (ডিফল্ট কনফিগারেশন) এবং সুইফটপিএম সহ এই কোডটি লেখার চেষ্টা করুন।

import PinLayout

final class TestViewController: UIViewController {

}

স্পোলার: কোকোপডস এই কোডটি সংকলন করবে, কারণ কোকোপডগুলি পিনলয়আউট (ইউআইকিট সহ) এর প্রতিটি আমদানি আমদানি করবে এবং সুইফটপিএম এট্রিকভাবে ফ্রেমওয়ার্ক আমদানি করবে না because

ডার্টি হ্যাক

আপনি কি মনে করেন এক্সকোড বিল্ডটি বহু-থ্রেডযুক্ত?

ঠিক আছে, আপনি এটির অপব্যবহার করতে পারেন, যদি আপনি আপনার প্রকল্পটিকে অনেকগুলি স্বতন্ত্র টুকরোতে ভাগ করতে সক্ষম হন এবং সেগুলি আপনার প্রকল্পে স্বাধীন ফ্রেমওয়ার্ক হিসাবে আমদানি করতে পারেন। এটি সংশ্লেষকে কমিয়ে দেয় এবং এটিই ছিল প্রথম সমাধান যা আমরা ব্যবহার করেছি, তবে এটি আসলে খুব কার্যকর ছিল না, কারণ আমরা কেবল প্রথম পদ্ধতির তুলনায় কেবলমাত্র ইনক্রিমেন্টাল বিল্ড সময়কে ~ 4-5m কমাতে পারি যা কিছুই নয়।


শুভকামনা, সাথী। আপনি কীভাবে আপনার প্রকল্পে সংযুক্তিকে কমিয়েছেন তা আপনার অভিজ্ঞতা ভাগ করুন। বিদায়!
x0 জেড 1

3

এখানে কোনও সোনার বুলেট নেই, তবে চেক করার মতো প্রচুর জিনিস রয়েছে:

  • নিশ্চিত হয়ে নিন যে আপনি আসলে আপনার স্কিমে ডিবাগ কনফিগারেশন ব্যবহার করছেনডিবাগ কনফিগারেশন ব্যবহার করে এক্সকোড স্কিম সম্পাদক

  • আপনি কীভাবে ম্যাট এর পরামর্শ অনুযায়ী বর্ধিত বিল্ড বনাম পুরো মডিউল ব্যবহার করছেন তা নিশ্চিত করার জন্য নীচে দেখুন। এছাড়াও নিশ্চিত করুন যে ডিবাগ বিল্ডগুলির জন্য আপনার অনুকূলকরণ স্তরটি কোনও নয়। এক্সকোড বিল্ড সেটিংস বর্ধিত বিল্ডগুলি দেখায়

  • আপনি যদি RxSwift এর মতো টাইপ-ইনফারেন্স ভারী ফ্রেমওয়ার্ক ব্যবহার করেন তবে সুস্পষ্ট প্রকারের টীকাগুলি যুক্ত করা সময় বাড়ানোর গতি বাড়িয়ে তুলতে পারে।

  • যদি প্রকল্পটি খুব বড় হয় তবে আপনি উত্স ফাইলগুলির লজিক্যাল গ্রুপগুলিকে ফ্রেমওয়ার্কগুলিতে রিফ্যাক্ট করতে বিবেচনা করতে পারেন তবে এটি আপনার পছন্দের চেয়ে পরিবর্তনের খুব কঠোর হতে পারে

আপনি যদি প্রকল্পটি সম্পর্কে আরও কিছু সুনির্দিষ্ট সরবরাহ করেন তবে এটি সহায়তা করতে পারে: আপনি কি কোনও লাইব্রেরি স্থিতিশীলভাবে সংযুক্ত করছেন? এটি একটি কাঠামো বা অ্যাপ্লিকেশন লক্ষ্য? আপনি কত বড় এবং কোন সুইফ্ট সংস্করণ ব্যবহার করছেন? আপনার কি এমন কোনও কাস্টম বিল্ড পর্যায় রয়েছে যেমন লন্টার বা কোড জেনারেশন যা কখনও কখনও বাদ যায়?

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.