source

iOS용 동적 라이브러리를 구축하고 런타임에 로드할 수 있습니까?

ittop 2023. 5. 12. 22:42
반응형

iOS용 동적 라이브러리를 구축하고 런타임에 로드할 수 있습니까?

iOS(iPhone/iPad)에서 동적 라이브러리가 지원됩니까?

Xcode에서 새로운 프로젝트 -> Framework & Library -> 코코아 라이브러리 (dynamic)를 만들려고 했습니다.프로젝트 설정에서 기본 SDK를 다음과 같이 설정했습니다.iOS device 4.1대상 및 대상iOS4.1그러나 빌드 오류가 있습니다.

target은 'com.apple.product-type.dynamic' 제품 유형을 지정하지만 'com.apple.product-type.dynamic' 플랫폼에는 해당 제품 유형이 없습니다."

제가 선택한 빌드는 시뮬레이터 -> 디버그 -> i386입니다.

다크 더스트의 답변에 정말 반대하는 것은 아니지만, 만약 내가 내 내면의 빌 클린턴을 전달할 수 있다면, 그것은 지원되는 의미무엇인지에 달려 있습니다 :)

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 빌드 및 사용

이렇게 하면 정상적인 iOS .dylib 라이브러리를 구축하여 위의 샘플 코드에 따라 사용할 수 있습니다.(예, 새 XCode 버전을 설치할 때마다 이 기능의 잠금을 다시 해제해야 합니다.)

기술적인 한계가 아니라 앱스토어 정책의 한계입니다.앱스토어에 국한되지 않는다면 그렇게 할 수 있습니다.이 기술은 앱이 샌드박스로 설정된 경우 다이립을 로드할 수 있는 위치를 제한할 수 있지만 탈옥이 필요하지 않습니다.

편집: 이 정보가 향후 링크 부패로 손실되지 않도록 하기 위해, Xcode에서 iOS 다이립을 활성화하는 방법에 대해 제공한 링크의 내용입니다.(참고: 이 프로세스는 Xcode 4에서 계속 작동하지만 경로 등에 대한 업데이트는 아래 주석을 참조하십시오.)출처는 iOS Place 블로그입니다.


Xcode는 iOS용 dylib를 빌드할 수 없습니다.앱이 단일 바이너리가 아닐 경우 거부됩니다.하지만 선택적 모듈을 로드할 수 있는 플러그인 아키텍처가 있는 애플리케이션이 있습니다.iOS에 완전히 이식하기 전에 개념을 증명할 수 있는 빠른 프로토타입을 원합니다.dyllib가 단순히 작동할 수 있다면 하는 것이 더 빠릅니다.따라서 이 게시물은 dylib을 구축하고 사용하는 방법을 보여주지만 앱스토어에 승인되지 않을 것입니다. (10.6.4의 Xcode 3.2.4로 테스트됨)

속성 목록 편집기: /Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX 제품 유형.xcspec 및 /Developer/Platforms/iPhone Simulator.platform/Developer/Library/X 코드/Specifications/iPhone Simulator ProductType.xcspecific에서 파일을 엽니다.

"MacOSX Product Typespec"에서 제품 유형이 있는 항목을 찾습니다.com.apple.product-type.library.dynamic"iPhone Simulator ProductTypespec.xcspec"으로 끌어다 놓습니다.

Xcode 스크린샷 1

"MacOSX Package Typespec.xcspec" 및 "iPhone Simulator Package" 열기type.xcspec"이(가) 같은 위치에 있습니다.

패키지 유형이 있는 "MacOSX Product Typespec"에서 항목을 찾습니다.com.apple.package-type.mach-o-dylib그리고 그것을 "iPhone Simulator 패키지"로 끕니다..xcspec"을 입력합니다.

Xcode 스크린샷 2

"iPhoneOS.platform"에 대한 단계를 반복하고 실행 중인 경우 Xcode를 다시 시작합니다.

자, 이제 딜립을 만들어 보겠습니다."Cocoa Touch 정적 라이브러리" 템플릿으로 시작합니다.여기에는 Foundation.framework가 프로젝트에 포함되어야 합니다.dylib 빌드를 위해 템플릿 위에 변경한 내용입니다.

텍스트 편집기에서 Xcode 프로젝트 파일 번들 에 있는 project.pbxproj 파일을 엽니다."producttype" 문자열을 검색하고 해당 값을 다음으로 변경합니다.com.apple.product-type.library.dynamic;

이제 Xcode로 프로젝트를 열고 Project->Edit Project Settings(프로젝트 설정 편집)로 이동합니다.

"설치 디렉토리"가 다음으로 설정됨@executable_path/왜냐하면 저는 앱의 실행 파일과 같은 디렉터리에 dyllib를 넣을 계획이기 때문입니다.

동적 라이브러리로 설정된 "Mach-O Type"

"실행 가능한 확장"이 dyllib로 설정됨

"실행 가능한 접두사"가 비어 있음으로 설정됨

라이브러리에 간단한 메소드를 하나 또는 두 개 추가하여 빌드합니다.

이제 테스트할 앱을 만듭니다.이번에는 보기 기반 응용프로그램을 선택합니다.UIButton과 UIBabel을 연결하여 lib를 호출하고 반환 메시지를 표시합니다.전체 프로젝트 테스트 앱을 다운로드하여 가지고 놀 수 있습니다.

잃어버린 지식:아래 스크린샷은 현재 작동하지 않는 링크와 관련이 있습니다.iOS에서 dylib 빌드 및 사용

이 질문을 받았을 때 동적 라이브러리는 iOS에서 지원되지 않으므로 앱이 거부됩니다.정적 라이브러리만 허용됩니다.

그러나 iOS8에서는 동적 라이브러리와 프레임워크를 사용할 수 있습니다."그냥 작동해야 합니다."

Xcode 11.4.1부터는 동적 라이브러리가 허용되지 않습니다(프로젝트가 모든 대상에 대해 컴파일되지 않음).libs/framework를 사용하는 새로운 방법은 xcodebuild의 create-xcframework입니다.

언급URL : https://stackoverflow.com/questions/4733847/can-you-build-dynamic-libraries-for-ios-and-load-them-at-runtime

반응형