Cocoa 애플리케이션에 dylib 번들

4914 단어 MacOSX코코아

해결하려는 과제



어떤 dylib을 사용하는 Cocoa 애플리케이션을 개발할 때 사용자가 dylib을 설치하고 있는지 모르기 때문에 애플리케이션 중에 번들로 제공하고 싶습니다.

이 예에서는 libusb-1.0.0.dylib를 번들로 사용하는 방법에 대해 설명합니다.

절차


  • dylib 복사
  • Build Phase(Copy Files) 추가
  • Build Phase(Run Script) 추가
  • Link Binary with Libraries 변경

  • dylib 복사



    xcode에 libusb-1.0.0.dylib 추가


    Build Phase (Copy Files) 추가



    Target의 Build Phase를 수정한다. Editor → Add Build Phase → Add Copy Files Build Phase
    이 Phase는 Link Binary with Libraries 위에 둔다.
    * Destination: Shared Support
    * Subpath: 공백
    * Copy only when installing: 체크 없음
    목록에 libusb-1.0.0.dylib 추가.


    Build Phase (Run Script) 추가



    Editor → Add Build Phase → Add Run Script Build Phase
    이 Phase는 위에서 설명한 Copy Files Build Phase 아래에 둔다.

    스크립트는 다음과 같습니다. 이것은 참고로 한 사이트에서 그대로.
    #!/bin/bash
    # In Xcode you actually enter the path for the shell
    # you want to use in a text field about the shell source.
    # So, !/bin/bash might not be necessary.
    
    # Space separated list of libraries.
    # Enter any dylibs you have in your Copy File Phase.
    TARGETS=(libusb-1.0.0.dylib)
    
    EXECFILE=${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}
    LIBPATH=${BUILT_PRODUCTS_DIR}/${SHARED_SUPPORT_FOLDER_PATH}
    NEWLIBPATH=@executable_path/../SharedSupport
    
    for TARGET in ${TARGETS[@]} ; do
    LIBFILE=${LIBPATH}/${TARGET}
    TARGETID=`otool -DX "${LIBPATH}/$TARGET"`
    NEWTARGETID=${NEWLIBPATH}/${TARGET}
    install_name_tool -id "${NEWTARGETID}" "${LIBFILE}"
    install_name_tool -change ${TARGETID} ${NEWTARGETID} "${EXECFILE}"
    done
    

    Link Binary with Libraries 변경



    libusb-1.0.0.dylib를 추가한다. 이번에는 libusb가 의존하고 있는 IOKIT도 추가하고 있다.


    최종 Build Phase의 순서는 이런 느낌으로.


    완성



    이것으로 번들과 링크 작업은 완성. libusb의 example을 AppDelegate에 넣어 움직여 보았지만 제대로 움직이고 있다.


    주의



    릴리스시에는 라이센스 표시를 잊지 말고.

    참고

    좋은 웹페이지 즐겨찾기