รูปแบบไฟล์ 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]