รูปแบบไฟล์ Mach-O (วัตถุเครื่อง - .o)
ในโลก iOS ไฟล์ต้นฉบับทุกไฟล์จะถูกแปลงเป็นไฟล์ออบเจ็กต์ - ABI [เกี่ยวกับ]ไฟล์ Mach-O [เกี่ยวกับ]ซึ่งจะถูกรวมไว้ในชุดไฟล์ปฏิบัติการขั้นสุดท้าย (เช่นแอปพลิเคชันกรอบงาน ... ) ไฟล์ (เช่นห้องสมุด ... ) และพฤติกรรมของมันถูกกำหนดโดยMach-O type[เกี่ยวกับ]
Packageเป็นไดเรกทอรีที่ behavious ตัวเองเป็นแฟ้ม opaque file- มันถูกสร้างขึ้นสำหรับประสบการณ์ของผู้ใช้ที่จะทำการเปลี่ยนแปลงโครงสร้างภายในที่ทำให้เกิดพฤติกรรมของโปรแกรมที่ไม่สามารถคาดการณ์ได้ แพคเกจที่ใช้ในการหรือกับDocument Package Bundleคุณสามารถใช้Show Package Contentsใน Finder
Bundleเป็นไดเรกทอรีที่มีโครงสร้างเฉพาะในการจัดระเบียบไบนารี (รหัสที่สามารถใช้งานได้) และทรัพยากรสำหรับรหัสนั้น (เช่นอิมเมจ, ไส้ปากกา ... ) บันเดิลมีไฟล์Info.plist[เกี่ยวกับ] Bundle ถูกสร้างขึ้นสำหรับประสบการณ์นักพัฒนา นอกจากนี้ยังสามารถบรรจุ บันเดิลมีหลายประเภท:
application bundle - Application target
framework bundleและversioned bundleเป็นประเภทย่อย -Framework Target
loadable bundle(aka plug-in bundle) - Bundle target(ชุดทดสอบ UI, ชุดทดสอบหน่วย)
- อื่น ๆ (
dSYM[เกี่ยวกับ]ชุดข้อมูล)
Application- .ipa, .app[เกี่ยวกับ] - packaged application bundle- โปรแกรมที่เปิดใช้งานได้
Tests- packaged loadable bundleซึ่งใช้ในการทดสอบไบนารี สถาปัตยกรรมปลั๊กอินช่วยให้เราสามารถเพิ่มฟังก์ชั่นใหม่ (กรณีทดสอบ) เป็นโมดูลแยกลงในไบนารีที่มีอยู่
ห้องสมุดและกรอบงาน
Martin Fowler บน InversionOfControl
Library เป็นชุดของฟังก์ชั่นที่คุณสามารถโทรหาได้ในปัจจุบันมักจะจัดเป็นคลาส การโทรแต่ละครั้งจะทำงานและส่งคืนการควบคุมให้กับลูกค้า
Framework รวบรวมการออกแบบที่เป็นนามธรรมพร้อมกับมีพฤติกรรมมากขึ้นในการใช้งานคุณจำเป็นต้องแทรกพฤติกรรมของคุณลงในสถานที่ต่าง ๆ ในกรอบทั้งโดยการทำคลาสย่อยหรือโดยการเสียบในชั้นเรียนของคุณเอง รหัสของเฟรมเวิร์กจะเรียกรหัสของคุณที่จุดเหล่านี้ ตัวควบคุมหลักของโปรแกรมกลับด้านย้ายจากคุณไปที่เฟรมเวิร์ก (การกลับกันของการควบคุม)
ไลบรารีและกรอบงานบน iOS
Libraryเป็นชุดของไฟล์วัตถุ Mach-O [ตรวจสอบคงที่หรือแบบไดนามิก]รวบรวมสำหรับสถาปัตยกรรมอย่างน้อยหนึ่ง
Static library- .a(หรือที่รู้จักกันว่าไลบรารีเก็บถาวรแบบคงที่, ไลบรารีที่เชื่อมโยงแบบคงที่ที่มีการแชร์[doc] ) - เมื่อคุณเพิ่มลงในแอปพลิเคชันของคุณสแตติกเกอร์ลิงก์ระหว่างการรวบรวมจะรวมไฟล์วัตถุจากไลบรารีและจัดเก็บ ไฟล์. ข้อเสียคือไฟล์เอาต์พุตขนาดใหญ่
จาก Xcode 9.0 สนับสนุนไลบรารีแบบคงที่ Swift
Dynamic library- .dylib(aka ไลบรารีที่ใช้ร่วมกันแบบไดนามิกวัตถุที่แชร์ห้องสมุดที่เชื่อมโยงแบบไดนามิก[doc] ) มีการเชื่อมโยงแบบไดนามิกกับแอปปฏิบัติการที่โหลดหรือรันไทม์ของแอปแต่ไม่ได้คัดลอกลงใน ในทางปฏิบัติแพคเกจของแอปจะมีโฟลเดอร์ Frameworks พร้อม.dylibไฟล์ ทั้งหมด iOS และ MacOS ระบบdynamicห้องสมุด ข้อเสียคือเวลาเปิดตัวช้าเนื่องจากไลบรารีไดนามิกทั้งหมดควรถูกคัดลอกและเชื่อมโยง
[การเชื่อมโยงแบบคงที่เทียบกับแบบไดนามิก]
Text-based stub library- .tbd[เกี่ยวกับ]เป็นส่วนย่อยของข้อความdynamic libraryซึ่งตั้งอยู่บนอุปกรณ์เป้าหมาย ดังนั้นคุณไม่ควรจัดทำไลบรารีแบบไดนามิกในบันเดิลของคุณ มันมีผลกระทบขนาด
Frameworkอาคาbinary framework- .frameworkเป็นnot packaged framework bundle(เพื่อให้นักพัฒนาสามารถดูส่วนหัวและทรัพยากรได้อย่างง่ายดาย) ซึ่งมีstatic or dynamicไลบรารีที่คอมไพล์ไฟล์ส่วนหัวและทรัพยากร
Static frameworkมีstatic libraryแพ็กเกจที่มีรีซอร์ส
Dynamic frameworkมีdynamic libraryและทรัพยากร นอกจากนั้นเฟรมเวิร์กแบบไดนามิกยังสามารถรวมไลบรารีไดนามิกเดียวกันในเวอร์ชันต่างๆในบันเดิลเดียว ( versioned bundle)
[เฟรมคงที่เทียบกับไดนามิก]
Embedded frameworkเป็นdynamic frameworkกล่องแซนด์บ็อกซ์ของแอพ ประเภทนี้ถูกสร้างขึ้นครั้งแรกของทั้งหมดสำหรับการขยายรหัสหุ้นสามัญและทรัพยากร ใช้ได้เมื่อเป้าหมายการปรับใช้คือ iOS 8+
Umbrella framework [เป้าหมายรวม]เป็นกรอบงานที่มีกรอบงานอื่น ๆ มันไม่ได้สนับสนุนอย่างเป็นทางการบน iOS และนั่นคือเหตุผลว่าทำไมจึงไม่แนะนำสำหรับนักพัฒนาเพื่อสร้างพวกเขา[เอกสารอย่างเป็นทางการ] ในความเป็นจริงมันเป็นชุดของเฟรมเวิร์กย่อย (หรือ Nested Frameworks) เมื่อคุณสร้างเฟรมเวิร์กที่มีการพึ่งพาผู้บริโภค (เช่นแอพ) จะรับผิดชอบในการเพิ่มการพึ่งพานี้พร้อมกับเฟรมเวิร์กของคุณลงในโครงการ ในฐานะนักพัฒนาเป็นเรื่องปกติที่จะพยายามหาวิธีถ่ายโอนหน้าที่นี้จากผู้บริโภคไปยังของคุณ เป็นผลให้คุณคิดว่าUmbrella frameworkเป็นการช่วยเหลือ แต่มักจะนำไปสู่ปัญหาร้ายแรงกับการจัดการเวอร์ชันและความซับซ้อนในการสร้างและสนับสนุน
Fake Framework- เป็นผลมาจากการดำเนินงานเฉพาะภายใต้static libraryการสร้างมัดที่มีส่วนขยายที่จะประพฤติตัวเองเป็น.framework dynamic frameworkเทคนิคนี้ใช้เมื่อ Xcode ไม่สนับสนุนการสร้างเฟรมเวิร์กเนื่องจากไม่มีเท็มเพลตเฟรมเวิร์ก หนึ่งในสำนึกของกรอบปลอม ด้วย Xcode 6 Apple ได้เพิ่มการสนับสนุนเฟรมเวิร์ก iOS
Modular Framework[เกี่ยวกับ] -@importเป็นกรอบซึ่งมี.modulemapไฟล์อยู่ภายใน โมดูลสามารถมี submodules Modular Frameworkประโยชน์หลักคือการที่คุณประหยัดเวลาในการสร้างด้วย
Universal Library or Framework(aka Fat) [lipo] [เป้าหมายรวม]มีสถาปัตยกรรมหลายแห่ง ตัวอย่างเช่นงานสร้างของคุณควรสนับสนุน arch บางอย่างที่คุณสามารถควบคุมผ่านBuild Active Architecture Only [ONLY_ACTIVE_ARCH]
Dependency[เกี่ยวกับ]คุณสามารถใช้รหัสบุคคลที่สามเป็นส่วนหนึ่งของเป้าหมายได้ ช่วยให้คุณสามารถใช้รหัสจากแหล่งที่มาจำนวนมากเช่น - โครงการอื่นโครงการในพื้นที่ทำงานเดียวกันเป้าหมายอื่นห้องสมุดกรอบงาน ฯลฯ
วิธีสร้างและใช้ห้องสมุดแบบคงที่:
วิธีสร้างและใช้ Dynamic Framework [เปลี่ยนเป็นสแตติก]
[Xcode Build System]
[ส่วนประกอบ Xcode]
[Dynamic linker]