iOS 용 동적 라이브러리를 빌드하고 런타임에로드 할 수 있습니까?
iOS (iPhone / iPad)에서 동적 라이브러리가 지원됩니까?
Xcode에서 새 프로젝트 -> 프레임 워크 및 라이브러리 -> Cocoa Library (dynamic) 을 만들려고했습니다 . 프로젝트 설정에서 Base SDK 를로 설정 iOS device 4.1
하고 target을 iOS4.1
로 설정했지만 빌드 오류가 있습니다.
target은 제품 유형 'com.apple.product-type.library.dynamic'을 지정하지만 'iphonesimulator'플랫폼에는 해당 제품 유형이 없습니다 ".
선택한 빌드는 Simulator-> Debug-> i386 입니다.
이 질문을 받았을 때 iOS에서 동적 라이브러리를 지원하지 않아 앱이 거부되었습니다. 정적 라이브러리 만 허용됩니다.
그러나 iOS8에서는 동적 라이브러리 및 프레임 워크를 사용할 수 있습니다. "그냥 작동"해야합니다
정말와 의견이 맞지 않을거야 DarkDust의 대답 ,하지만 난 내 내면의 빌 클린턴 채널 수 있다면, 그것의 의미에 따라 달라 지지는 것입니다 :)
Apple은 App Store 앱에서이 작업을 수행하기를 원하지 않지만 운영 체제에서이를 허용합니다. 탈옥 앱은 항상이 기술을 사용합니다. 기본적으로 표준 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에서 일부 XCode xml 파일을 편집하여 대체 할 수있는 기능입니다.
이 작업을 수행하면 일반적인 iOS .dylib 라이브러리를 빌드하고 위의 샘플 코드에 따라 사용할 수 있습니다. (예, 새 XCode 버전을 설치할 때마다이 기능을 다시 잠금 해제해야합니다).
따라서 기술적 인 제한이 아니라 App Store 정책 제한입니다. App Store에 국한되지 않으면 할 수 있습니다. 앱이 샌드 박스 인 경우 dylib를로드 할 수있는 위치를 제한 할 수 있지만 이 기법은 탈옥 이 필요 하지 않습니다 .
편집 : 이 정보가 향후 링크 썩음으로 손실되지 않도록하기 위해 Xcode에서 iOS dylib를 활성화하는 방법에 대해 제공 한 링크의 내용이 있습니다. ( 참고 : 이 프로세스는 여전히 Xcode 4에서 작동하지만 경로 업데이트 등에 대해서는 아래 주석을 참조하십시오.) 소스는 iOS Place 블로그입니다 .
Xcode에서는 iOS 용 dylib를 빌드 할 수 없습니다. 단일 바이너리가 아닌 앱은 거부됩니다. 그러나 옵션 모듈을로드하는 플러그인 아키텍처가있는 응용 프로그램이 있습니다. iOS로 완전히 포팅하기 전에 개념을 입증하는 빠른 프로토 타입을 원합니다. dylib이 간단하게 작동하면 더 빠릅니다. 따라서이 게시물에서는 dylib를 빌드하고 사용하는 방법을 보여 주지만 App Store에 승인되지는 않습니다. (10.6.4에서 Xcode 3.2.4로 테스트)
1. 속성 목록 편집기에서 다음 파일을 엽니 다. /Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX Product Types.xcspec 및 /Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Specifications / iPhone 시뮬레이터 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. Locate the item in the “MacOSX Product Types.xcspec” that has the package type com.apple.package-type.mach-o-dylib
and drag it to the “iPhone Simulator PackageTypes.xcspec”.
5. Repeat the steps for the “iPhoneOS.platform” and relaunch Xcode if it was running.
Now, lets build a dylib. Start out with the “Cocoa Touch Static Library” Template. That should included the Foundation.framework in the project. Here are the changes I made on top of the template to build dylib.
1. Open the file project.pbxproj (found inside the Xcode project file bundle) in a Text Editor. Search for string “producttype”, change it’s value to com.apple.product-type.library.dynamic
;
Now, open the project with Xcode, go to Project->Edit Project Settings
2. “Installation Directory” set to @executable_path/
because I plan to put the dylib in the same directory as the app’s executable.
3. “Mach-O Type” set to Dynamic Library
4. “Executable Extension” set to dylib
5. “Executable Prefix” set to empty
6. Add one or two simple methods to the library and build it.
이제 테스트 할 앱을 만듭니다. 이번에는 View-based Application을 선택합니다 . UIButton과 UILabel을 연결하여 lib를 호출하고 리턴 메시지를 표시하십시오. 전체 프로젝트 TestApp을 다운로드하여 사용할 수 있습니다 .
'developer tip' 카테고리의 다른 글
이 jQuery 클릭 기능이 작동하지 않는 이유는 무엇입니까? (0) | 2020.07.28 |
---|---|
.exe 파일 이름으로 일부 프로세스 종료 (0) | 2020.07.28 |
Chrome> = 24-devtools를 오른쪽에 도킹하는 방법은 무엇입니까? (0) | 2020.07.28 |
XAML DataGridColumns를 전체 DataGrid를 채우려면 어떻게해야합니까? (0) | 2020.07.28 |
Java의 기본 액세스 수정자는 무엇입니까? (0) | 2020.07.28 |