ฉันไม่เห็นด้วยกับคำตอบของ DarkDustแต่ถ้าฉันสามารถถ่ายทอด Bill Clinton ภายในของฉันได้ก็ขึ้นอยู่กับความหมายของการสนับสนุนคือ :)
Apple ไม่ต้องการให้คุณทำสิ่งนี้กับแอพ App Store แต่ระบบปฏิบัติการอนุญาตอย่างแน่นอน แอพ Jailbreak ใช้เทคนิคนี้ตลอดเวลา โดยทั่วไปคุณใช้เทคนิค UNIX มาตรฐานเพื่อเปิดเฟรมเวิร์ก / ไลบรารีแบบไดนามิกจากนั้นใช้สิ่งต่างๆในนั้น ฟังก์ชั่น dlopenช่วยให้คุณเปิดห้องสมุดโดยผ่านในเส้นทางไปยังกรอบที่หรือ dylib จากเอกสารบางชุดสำหรับการสร้างแอปเจลเบรคต่อไปนี้เป็นตัวอย่างของการเรียกใช้init()
ฟังก์ชันที่ใช้งานภายใน dylib ของคุณเอง
#include <dlfcn.h>
initWrapper() {
char *dylibPath = "/Applications/myapp.app/mydylib2.dylib";
void *libHandle = dlopen(dylibPath, RTLD_NOW);
if (libHandle != NULL) {
// This assumes your dylib’s init function is called init,
// if not change the name in "".
void (*init)() = dlsym(libHandle, "init");
if (init != NULL) {
init();
}
dlclose(libHandle);
}
}
นอกจากนี้ข้อ จำกัด เริ่มต้นที่ไม่อนุญาตให้คุณสร้างโปรเจ็กต์ไลบรารีแบบไดนามิกสำหรับ iOS คือบางสิ่งใน Xcode ที่คุณมีความสามารถในการแทนที่โดยการแก้ไขไฟล์ xml XCode บางไฟล์:
สร้างและใช้ dylib บน iOS
เมื่อคุณทำเสร็จแล้วคุณสามารถสร้าง iOS .dylibตามปกติได้ไลบรารีและใช้ตามโค้ดตัวอย่างด้านบน (ใช่คุณอาจต้องปลดล็อกความสามารถนี้อีกครั้งเมื่อใดก็ตามที่คุณติดตั้ง XCode เวอร์ชันใหม่)
ดังนั้นจึงไม่ใช่ข้อ จำกัด ทางเทคนิค แต่เป็นข้อ จำกัด ด้านนโยบายของ App Store หากคุณไม่ จำกัด เฉพาะ App Store คุณก็ทำได้ โปรดทราบว่าเทคนิคนี้ไม่จำเป็นต้องมีการเจลเบรคแม้ว่าแอปจะเป็นแซนด์บ็อกซ์แต่ก็อาจ จำกัดตำแหน่งที่สามารถโหลด dylib ได้
แก้ไข:เพื่อให้แน่ใจว่าข้อมูลนี้จะไม่สูญหายไปกับลิงค์เน่าในอนาคตนี่คือเนื้อหาของลิงค์ที่ฉันให้ไว้เกี่ยวกับวิธีเปิดใช้งาน iOS dylib ใน Xcode ( หมายเหตุ:กระบวนการนี้ยังคงใช้ได้กับ Xcode 4 แต่โปรดดูความคิดเห็นด้านล่างสำหรับการอัปเดตเส้นทาง ฯลฯ ) แหล่งที่มาคือบล็อก iOS Place :
Xcode ไม่อนุญาตให้คุณสร้าง dylib สำหรับ iOS แอปจะถูกปฏิเสธหากไม่ใช่ไบนารีเดี่ยว แต่ฉันมีแอปพลิเคชันที่มีสถาปัตยกรรมปลั๊กอินสำหรับโหลดโมดูลเสริม ฉันแค่ต้องการต้นแบบอย่างรวดเร็วเพื่อพิสูจน์แนวคิดก่อนที่จะพอร์ตไปยัง iOS อย่างสมบูรณ์ ทำได้เร็วกว่าถ้า dylib สามารถทำงานได้ ดังนั้นโพสต์นี้จึงแสดงวิธีสร้างและใช้ dylib แต่โปรดทราบว่าจะไม่ได้รับการอนุมัติจาก App Store (ทดสอบด้วย Xcode 3.2.4 เมื่อวันที่ 10.6.4)
1.เปิดไฟล์เหล่านี้ในตัวแก้ไขรายการคุณสมบัติ: /Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX Product types.xcspecและ/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Specifications / iPhone Simulator ProductTypes.xcspec
2.ค้นหารายการใน“ MacOSX Product types.xcspec ” ที่มีประเภทผลิตภัณฑ์com.apple.product-type.library.dynamic
แล้วลากไปที่“ iPhone Simulator ProductTypes.xcspec ”
3.เปิด“ MacOSX Package types.xcspec ” และ“ iPhone Simulator PackageTypes.xcspec ” ที่พบในที่เดียวกัน
4.ค้นหารายการใน“ MacOSX Product types.xcspec ” ที่มีประเภทแพ็กเกจcom.apple.package-type.mach-o-dylib
แล้วลากไปที่“ iPhone Simulator PackageTypes.xcspec ”
5.ทำซ้ำขั้นตอนสำหรับ“ iPhoneOS.platform ” และเปิด Xcode ใหม่หากยังทำงานอยู่
ตอนนี้ให้สร้าง dylib เริ่มต้นด้วยเทมเพลต“ Cocoa Touch Static Library ” ซึ่งควรรวม Foundation.framework ไว้ในโครงการ นี่คือการเปลี่ยนแปลงที่ฉันทำที่ด้านบนของเทมเพลตเพื่อสร้าง dylib
1.เปิดไฟล์project.pbxproj (อยู่ในชุดไฟล์โครงการ Xcode) ในโปรแกรมแก้ไขข้อความ ค้นหาสตริง " producttype " เปลี่ยนค่าเป็นcom.apple.product-type.library.dynamic
;
ตอนนี้เปิดโครงการด้วย Xcode ไปที่โครงการ -> แก้ไขการตั้งค่าโครงการ
2. “ไดเรกทอรีการติดตั้ง " ตั้งค่าเป็น@executable_path/
เพราะฉันวางแผนที่จะใส่ dylib ในไดเร็กทอรีเดียวกันกับไฟล์ปฏิบัติการของแอป
3ตั้งค่า" Mach-O Type " เป็นไดนามิกไลบรารี
4ตั้งค่า" Executable Extension " เป็น dylib
5 “ ปฏิบัติการคำนำหน้า ” ชุดที่ว่างเปล่า
6.เพิ่มวิธีง่ายๆหนึ่งหรือสองวิธีในไลบรารีและสร้างขึ้น
ตอนนี้สร้างแอปเพื่อทดสอบ ครั้งนี้ผมเลือกดูตามแอพลิเคชัน เชื่อมต่อ UIButton และ UILabel เพื่อเรียก lib และแสดงข้อความส่งคืน คุณสามารถดาวน์โหลด TestApp โครงการที่สมบูรณ์และเล่นกับมันได้