ניהול תלות ב- iOS

פיתוח iOS מודרני רק לעתים רחוקות מתחיל מאפס.ספריות של צד שלישי מטפלות בכל דבר מרשתות וג'ייסון מתכנס לרכיבי UI ודימויים צ'נג.ללא גישה מובנת, מורידות באופן ידני מסגרות, פותרות קונפליקטים וקישורים בין בינאריים הופכים במהרה לסיוט תחזוקה.

CocoaPods ו Carthage הם שני הכלים המוערכים ביותר לניהול תלות בפרויקטים של iOS. בעוד CocoaPods מציעה שילוב מבוסס על שטח, עבודה, Carthage עוקב אחר פילוסופיה מבוזרת, בונה-זה בעצמך.הבנת החוזקות ואת הבורסות של כל אחד עוזר לך לבחור את הגישה הנכונה עבור הצוות שלך, היישום שלך, הפריסה שלך.

קוקופודס: מרכזי ואוטומטי

קוקופודס הוא מנהל התלות הדומיננטי מאז כניסתו.הוא משתמש באינדקס מרכזי בשם CocoaPods Specs ומייצר חלל עבודה Xcode אשר מטפל בכל התלויים באופן אוטומטי.זה אומר שאתה יכול להוסיף ספרייה על ידי פשוט להכריז אותו בפודפט, להפעיל פקודה, ומיד להתחיל לייבא אותו בקוד שלך.

התקנה והגדרה

קוקופודס מותקנת באמצעות רוביGems. macOS עם רובי, אבל ייתכן שתצטרך לשדרג או להשתמש במנהל גרסאות רובי.הפקד הסטנדרטי הוא:

sudo gem install cocoapods

לאחר ההתקנה, לנווט למנהל הפרויקט שלך והתחלות פודפט:

pod init

זה יוצר קובץ טקסט רגיל בשם FLT:0 (Podfilepherph) 1:1 אתה לערוך אותו כדי לציין את פלטפורמת היעד שלך, כל דגל:2 (הופנה מהדףות עבור ספריות סוויפט), ואת התלויות שאתה צריך.

platform :ios, '15.0'

target 'MyApp' do
 use_frameworks!

 pod 'Alamofire', '~> 5.7'
 pod 'SwiftyJSON', '~> 5.0'
 pod 'SDWebImage', '~> 5.15'
end

ברגע שהפודפטה מוכנה, לרוץ:

pod install

קוקופודס מוריד את הגרסאות המפורטות, פותר את התלויות, ומייצר קובץ (FLT:5) מאותו רגע ואילך, עליך לפתוח את מרחב העבודה – לא את המקורי של FLT:6 כדי לבנות ולהפעיל את האפליקציה שלך.

תכונות מתקדמות של CocoaPods

  • (ב) ויקרא י"א: "ה': "ה' (ב') ,"ה' (ב') ,"ה', "ה') ,"ה' (ב') ,"ב') ,"ה', ו'"ה' (ב') ויקרא י"ד).
  • (ב) ,0) נתיבים מקומיים: ⁇ 1 (בתרגום חופשי: 1) ניתן להצביע על תיקיה מקומית לספריות פרטיות:
  • מקור:0 (ב) ,5 ,5 ,5 ,5 ,5 ,5 , ).
  • (ב) סעיף 1:0 (בשיתוף:ב): "הקובץ הזה מנע כל תלות בגרסה מסוימת, הבטחת בנייה מחדש של צוות ו- CI.
  • (FLT:0)Plugins:FLT:1 אתה יכול להרחיב את CocoaPods עם תוספים עבור SwiftLint, Firebase, או לבנות תסריטים מותאם אישית.

קוקופודס תומך גם במטרות מרובות-פלטפורמות מרובות, ניתן לקבל קבוצות תלות שונות עבור iOS, macOS, ו- WatchOS על ידי קינון FLT:10 בלוקים בתוך פודוקס אחד.

Post-Install Hooks and Customization

(הצורך המשותף הוא להפעיל תסריט אחרי כל קונסולת 11 לדוגמה, ייתכן שתרצה להפשיט ארכיטקטורות משחרור.

post_install do |installer|
 installer.pods_project.targets.each do |target|
 target.build_configurations.each do |config|
 config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.0'
 end
 end
end

קובצים כאלה נותנים לך שליטה על פרויקט Podcast שנוצר, אבל הם גם מוסיפים מורכבות. Overuse יכול להפוך את הפודפט שלך קשה לקריאה ותחזוקה.

הקרתגו: טיהור ידיים ו-Off

Carthage נוקט גישה שונה.במקום מרכזי metadata, הוא מסתמך על תגי Git ואת הפרויקטים של Xcode בפועל של כל ספריה. Carthage בונה את המסגרות על המכונה שלך ומשאיר את שלב האינטגרציה - מסגרות מתרוקדות לתוך פרויקט Xcode שלך - בעיקר כלפיך. הפרעה מינימלית זו פונה למפתחים שרוצים שליטה מלאה וטביעה קטנה יותר בגרסת הבקרה שלהם.

התקנה והגדרה

Carthage מותקנת בדרך כלל באמצעות Homebrew:

brew install carthage

הבא, ליצור קובץ טקסט רגיל בשם FLT:0 [CartfilepherFLT] 1 בשורש הפרויקט שלך.המס דומה ל- CocoaPods אבל נקודות ל- GitHub repositories או כל מקור גיל:

github "Alamofire/Alamofire" ~> 5.7
github "SwiftyJSON/SwiftyJSON" ~> 5.0
github "onevcat/Kingfisher" ~> 7.0

לאחר שעריכה את הקרפטה, לרוץ:

carthage update --platform iOS

פקודה זו משטפת את הרשומות, בודקת את הגרסאות המתויגות, ומבנייה את המסגרות באמצעות Xcode.הבתים וכתוצאה מכך ממוקמים ב-FLT:0)Carthage/Build/iOSigFLT:1, ולאחר מכן לגרור אותם באופן ידני לתוך פרויקט Xcode שלך תחת "Frameworks, Libraries, ו- Embedded Content", הקפד להוסיף אותם למטרה המתאימה.

הבדלים מרכזיים של קוקופודס

  • (ב) אין מקום עבודה: 1.10.10.10.30 לא משנה את קובץ הפרויקט שלך.You Stay in control of file Reference and Build Settings.
  • (ב) מהירות בנייה: ⁇ FLT:1) Carthage יכול לטמון בונה. על CI, אתה יכול לבנות את התלויות מראש כדי להאיץ את הצינור.
  • (ב) ויקרא: ויקרא י"א): "ה' (ב"ד): "ה' (ב"ב)" (ב"ב)"ב)"ב"ה' (ב"ב)"ב"ה', ב"ה')" (ב"ב"ב)"ה'.
  • (ב) מדרש (ב"ג): "בְּהִיתִיתִיתִיתִיתִיתִיתִיתִיתִיתִיתִיתִיתִית: אִם הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא
  • (FLT:0) XCFramework Support: FIRLT:1 מאז Carthage 0.38, זה יכול להניב XCFrameworks, אשר עובד בצורה חלקה עם מנהל החבילה סוויפט וחיסול הצורך באדריכלות סימולטור.

המונחים: obquations

אתגר אחד עם Carthage הוא כי הוא בונה תלות ברצף.אם הספריה A תלויה בספריה B, עליך לרשום הן בקרטפטפטה. Carthage פותר את עץ התלות באופן אוטומטי, אבל עדיין צריך לקשר את כל התלויים הטרנספורמטיביים בפרויקט שלך באופן ידני.זה נותן לך חשיפה לכל בינארי הקישורים שלך נגד, אבל זה גם מגביר את הסיכוי של החסר מסגרת זמן רצוף.

השוואת קוקופודס וקרת'ג: מדריך מעשי

בחירת בין השניים תלויה בגודל הפרויקט שלך, בגרות הצוות ובזרימת העבודה של הפריסה.השולחן מתחת לסכמת את ה- Trading-offs המפתח.

Factor CocoaPods Carthage
Setup complexity Low – one command, workspace generated automatically. Medium – requires manual linking of frameworks.
Build system control Lower – CocoaPods merges project files and may override build settings. Higher – you control project structure and build phases.
Integration with Xcode Tight – workspace includes Pods project, all configurations preset. Loose – you add frameworks manually; no workspace changes.
CI/CD compatibility Good – pod install works reliably in CI, but full rebuild on each run if lockfile changes. Excellent – prebuilt frameworks can be cached; build times are faster.
Swift Package Manager migration Can coexist but may cause conflicts if both manage the same library. Can coexist more easily because Carthage does not modify project files.
Community and library availability Widest coverage – almost every popular library has a CocoaPods spec. Good coverage – but some niche libraries may not be Carthage-friendly.

מתי להשתמש ב- CocoaPods

  • אתה מתחיל פרויקט חדש ורוצה חתלתול מינימלי.
  • הצוות שלך כולל מפתחים זוטרים אשר נהנים משילוב של ידיים.
  • אתה צריך ספרייה זמינה רק באמצעות קוקופודס (עדיין קורה עבור כמה מורשת או פודס קנייני).
  • אתה מאוד לסמוך על תוסף CocoaPods (למשל, עבור בדיקות lint או קוד דור).

מתי להשתמש ב Carthage

  • אתה מעריך את המודולריות ורוצה להימנע מ"פרויקט הפוד".
  • האפליקציה שלך גדולה, ואתה צריך להתאים את הזמן לבנות על ידי עיגול מסגרות שנבנו מראש.
  • אתה נודד אל Swift Pack Manager ורוצה מעבר הדרגתי מבלי לשבור אינטגרציה קיימת.
  • אתה עובד על צוות המעדיפים לשמור על פרויקט Xcode רזה ולנהל באופן ידני הגדרות בנייה.

הגירה בין מנהלי תלות

המעבר מקוקופודס לקרוס או להיפך הוא אפשרי, אך דורש תכנון זהיר.כאן השלבים הגבוהים.

מפטר מקוקופודס ל Carthage

  1. הסר את הפודפטה, Podfile.lock, ואת סביבת העבודה.
  2. הסר כל שלב בנייה הקשור לפודס (למשל, "Embed Pods")
  3. צור קרטפי ורשימה את אותן ספריות (מבטיחות שהן תומכות ב- Carthage).
  4. « לרוץ , 19 .
  5. כל אחת מהמסגרות של ה-FLT:0 (Carthage/Build/iOSFLT:1) לפרויקט Xcode.
  6. עדכון כל הצהרות היבוא - תחת הקרת'ג, אתה מייבב מסגרות ישירות (למשל, FLT:20).
  7. בדיקה יסודית; תלות במעבר עשויה כעת להיות זקוקה לקשר מפורש.

מיגרנה מ Carthage to CocoaPods

  1. להסיר את השלבים הקשורים ל- Carthage ופניות המסגרת של פרויקט Xcode.
  2. למחוק את הקרפטן ואת קרטפטו.resolved.
  3. לרוץ (FLT:21) כדי ליצור פודוקס.
  4. הוסף את כל התלויים עם מגבלות גירסה מתאימות.
  5. לרוץ (FLT:22) ואז לפתוח את סביבת העבודה החדשה.
  6. בדוק עבור יבוא כפול - קוקופודס עלול להטביע ספריות באופן שונה.
  7. עדכון בונה הגדרות במידת הצורך (למשל, FLT:23).

הפרקטיקה הטובה ביותר עבור שני המנהלים

ללא קשר לכלי שתבחר, לאחר שיטות אלה ישמרו על הפרויקט שלך בריא.

  • (FLT:0) קבצי מנעול: FLT 1 תמיד לבצע Podfile.lock או Cartfile.resolved כדי לשלוט בגירסה.זה מבטיח לכל חבר צוות שרת CI משתמש בדיוק באותן גרסאות.
  • (FLT:0) גירסאות של פיץ': 1FLT השתמש במפעילים אופטימיים (FLT:24) כדי לאפשר עדכונים קטנים תוך חסימת שינויים משמעותיים בשבר.
  • (ב) מהדורות של [[1924]]]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]], [[1924]]]]]], [[1924]]]]]]]]]], [[1924]]]]]], [[1924]]]]
  • (FLT:0) Audit for Swift version תאימות: ההרחבה של סוויפט: מספר ספריות עשויות שלא לתמוך בגרסה סוויפט שהפרויקט שלך משתמש בה.בדוק שהזרוע או תג התלות של התלות תואמות את שרשרת הכלים של סוויפט.
  • (FLT:0) Remove un Usedencies:FreaLT:1 , מעת לעת ביקורת על קרטפטונן או Podfile והסרת ספריות שאינן בשימוש יותר.
  • (FLT:0)Consider SPM לפרויקטים חדשים:03F1) מנהל החבילה סוויפט נבנה כעת ל-Xקוד ונתמך על ידי רוב הספריות הגדולות.אם אתה מתחיל מאפס, SPM עשוי להיות הבחירה הפשוטה ביותר.

בעיות נפוצות

קוקופודס: "Spec not found"

זה בדרך כלל אומר הספרייה לא נדחקה לתא המטען של קוקופודס או שאתה משתמש בשם לא נכון.בדוק את השם הפוד על ה-FLT:0coapods.orgirFLT:1 אם הספריה היא פרטית, אתה צריך לציין את מקורו בפודפט שלך.

קוקופודס: קונפליקטים בתלויות חולפת

(ב) ,לבקר את הפלט, ייתכן שיהיה עליך להוסיף מגבלות גרסאות מפורשות עבור פודונים טרנספורמטיביים.שימוש ב-FLT:28 ו-FLT:29 יכול לאפס את גרף התלות.

Carthage: "No soמודול" בעת בניית

לעתים קרובות זה קורה כי המסגרת לא נבנתה עבור הפלטפורמה הנכונה (למשל, בנית עם FLT:30 בטעות) Re-runFLT:31 ולוודא את תיקיית הפלט.בנוסף, להבטיח כי הוספת המסגרת ל"עבודה, ליבריות, ותוכן מעומק", לא רק את ה-Nvigator.

הרכב: בניית נכשלת בגלל תלות נעדרת

אם הספריה שבה אתה משתמש יש תלות משלה (כמו תלות ב- RxSwift), עליך לרשום אותם בקרטפטפטה שלך. Carthage אינה מורידה באופן אוטומטי את התלויות הטרנספורמטיביות אלא אם הם מופיעים בכרפטה או מוגדרים כ- submodules.

גישות היברידיות: שימוש הן בקוקופודים והן ב- Carthage

בעוד שילוב של מנהלים תלותיים בפרויקט אחד אינו מומלץ, כמה צוותים עושים זאת מתוך צורך.לדוגמה, ספרייה קריטית יכולה להיות זמינה רק באמצעות קוקופאדס, בעוד שאר הפרויקט משתמש ב- Carthage.אם אתה חייב לשלב אותם, לשמור על סביבת העבודה של CocoaPods בנפרד וקישור מסגרות Carthage באופן ידני. להיות מודע לסכסוכים פוטנציאליים בסמלים כפולים או ניצול משאבים פשוטים יותר.

עתיד הניהול התלות של iOS

מנהל החבילה סוויפט (SPM) נחשב כעת לסטנדרט של אפל והוא משולב ישירות לתוך Xcode 11 ולאחר מכן, רוב ספרי הקוד הפתוח הוסיפו תמיכה ב-SPM, ו-SPM מבטלת את הצורך בכלים חיצוניים.

  • (FLT:0)CocoaPodsFLT:103) מציע התאמה עשירה באמצעות קובצי ותוספים, ואת ה-spec Repository שלה נשאר האוסף הגדול ביותר של ספריות iOS.
  • (ב) ,0) ,CarthageofFLT:1 נותן לך שליטה מלאה על תהליך הבנייה וקל יותר ל- cache, מה שהופך אותו פופולרי בזרימות עבודה של CI-heavy.

קבוצות רבות משתמשות ב-SPM עבור תלות חדשה תוך שמירה על שילובי מורשת עם קוקופודס או Carthage. עם הזמן, SPM צפויה להפוך ל ברירת המחדל, אבל עכשיו, הבנת כל שלושת הכלים מאפשרת לך לעבוד על כל בסיס קוד iOS.

מסקנה

ניהול תלות יעילה הוא אבן הפינה של פיתוח iOS מקצועי. CocoaPods מספק פתרון מסובב כי שותף תהליך האינטגרציה כולו, מה שהופך אותו אידיאלי עבור קבוצות שרוצים מהירות ופשטות. Carthage מציעה גישה רזה יותר, שקוף יותר אשר נותן מפתחי שליטה על בניית מערכות ופרויקט. על ידי שליטה בשני הכלים, אתה יכול לבחור את ההתאמה הנכונה לגודל הפרויקט שלך, עבודה, אשר תמיד לבצע קבצי תצוגה, שמירה על ערכת עיניים.

(ב) לקרא, לעיין ב[[1924]], [[1924]], [[1924]]]] ו[[1924]]]], [[1924]]]]]], [[1924]]]]]]