IOS 정적 라 이브 러 리 패키지 프로 세 스 간소화 상세 소개

IOS 정적 라 이브 러 리 패키지 프로 세 스 간소화
iOS 개발 에 서 는 SDK 개발 에 대한 수요 가 자주 발생 한다.개 발 된 정적 라 이브 러 리 는 수 동 으로 통합.a파일 을 한 다음 에 관련 헤더 파일 을 복사 한 다음 에 정적 라 이브 러 리 와 헤더 파일 을 같은 파일 에 포장 하여 SDK 사용자 에 게 보 내야 합 니 다.본 고 는 스 크 립 트 를 어떻게 사용 하 는 지 를 소개 하고 이 일련의 과정 을 간소화 할 것 이다.많은 초보 자 들 을 배려 하기 위해 서 튜 토리 얼 은 포장 의 기본 절 차 를 상세 하 게 소개 할 것 이다.
정적 라 이브 러 리 와 동적 라 이브 러 리 의 차이 에 대해 나의 다른 글 을 볼 수 있다.iOS 정적 라 이브 러 리 와 프레임 워 크 차이
프로젝트 설정
정적 라 이브 러 리 프로젝트 를 새로 만 듭 니 다.
这里写图片描述
그리고TestSDK아래 에 있 는 플러스 버튼 을 클릭 하여 새로운 Target 을 추가 합 니 다.
这里写图片描述
선택Target,새 것Cross-platform,이름Aggregate这里写图片描述 TestSDKShell디 렉 터 리 에 새로운 Target 이 하나 더 있 는 것 을 볼 수 있 습 니 다.
这里写图片描述
클릭TARGETS->TARGETS->TestSDKShell->Build Phases->+这里写图片描述
그리고 셸 파일 을 새로 만 듭 니 다.이름 은New Run Script Phases입 니 다.
这里写图片描述
파일 추가build_TestSDK_script.sh프로젝트 는 다음 과 같 습 니 다.
这里写图片描述
그리고 셸 파일 의 디 렉 터 리 를 방금 만 든Shell에 기록 합 니 다.
这里写图片描述
인 코딩 이 끝 난 후 노출 할 헤더 파일 을 설정 하고 노출 할 헤더 파일 을 추가 합 니 다Run Script Phases这里写图片描述
마지막 으로 블 로그 의 마지막 셸 코드 를Copy Files파일 에 복사 하여 실행build_TestSDK_script.sh하면 자동 포장 을 완성 할 수 있 습 니 다.
这里写图片描述
여기 서 존재 할 수 있 는 문 제 는 스 크 립 트 가 실행 할 수 있 는 권한 이 없습니다.터미널 에서TestSDKShell이 있 는 디 렉 터 리 로 전환 하여 사용 하 는 것 입 니 다.build_TestSDK_script.sh셸 파일 에 권한 을 부여 하고 다시 실행 하면 됩 니 다.운행 에 성공 하면 가방 이 다 싸 진 것 을 볼 수 있다.파일 의 이름 은 정적 라 이브 러 리 이름,날짜,Git 버 전(코드 를 제출 하지 않 았 기 때문에 Git 버 전 을 가 져 올 수 없습니다),Debug/Release 버 전 을 포함 합 니 다.
这里写图片描述
절차 분석 을 간소화 하 다.
스 크 립 트 간소화 절 차 를 시작 하려 면 먼저 SDK 가 주의해 야 할 다음 과 같은 몇 가 지 를 명 확 히 해 야 합 니 다.
  •     모든 자릿수 를 지원 하 는 장치 가 필요 합 니 다.sudo chmod +x build_TestSDK_script.sh
  •  Debug 와 Release 버 전 을 설정 할 수 있어 야 합 니 다
  •     시 뮬 레이 터 와 실제 컴퓨터 를 지원 해 야 합 니 다
  • 첫 번 째 로 우리 가 주의해 야 할 것 은 프로필 안의arm64 armv7 armv7s입 니 다.
    这里写图片描述
    이 설정 은 개발 자가 Xcode 를 설정 하고 현재 삽 입 된 장 치 를 만족 시 키 는 프로세서 바 이 너 리 파일 만 컴 파일 하 는 역할 을 합 니 다.현재 삽입 장 치 는 디 버 깅 에 사용 되 고 있 는 기계 입 니 다.일상적인 개발 에 서 는 컴 파일 속 도 를 높이 기 위해 Debug 모드 에서Build Active Architecture Only로 설정 할 수 있 지만 Release 모드 에 서 는YES로 설정 해 야 합 니 다.그렇지 않 으 면 온라인 파일 을 포장 하 는 데 문제 가 생 길 수 있 습 니 다.
    SDK 를 개발 할 때 우 리 는 모든 것 을NO로 설정 하면 포 장 된 파일 에 문제 가 없 을 것 이다.
    스 크 립 트 가 Debug 와 Relaese 모드 에 적합 하도록 합 니 다.저 희 는 Xcode 자체 설정 변수NO를 사용 합 니 다.포장 할 때 이 변 수 를 사용 하면 됩 니 다.
    포장 할 때 수정 할 게 요.여 기 는 어떤 버 전 으로 할 지 결정 할 게 요.
    这里写图片描述
    패키지 시 뮬 레이 터 정적 라 이브 러 리
    
    #        
    xcodebuild build -project ${PROJ} \
    -scheme ${LIB_STATIC_NAME} \
    -configuration ${CONFIGURATION} \
    -sdk iphonesimulator \
    clean \
    build \
    CONFIGURATION_BUILD_DIR=${IPHONE_SIMULATOR_DIR}
    패키지 라 이브 러 리 파일
    
    #       
    xcodebuild -project ${PROJ} \
    -scheme ${LIB_STATIC_NAME} \
    -configuration ${CONFIGURATION} \
    -sdk iphoneos \
    clean \
    build \
    CONFIGURATION_BUILD_DIR=${IPHONE_OS_DIR}
    마지막 으로 두 개의 라 이브 러 리 파일 을 합 친 것 입 니 다.
    
    #      
    LIB_NAME=lib${LIB_STATIC_NAME}.a
    
    #            
    lipo -create ${IPHONE_OS_DIR}/${LIB_NAME} ${IPHONE_SIMULATOR_DIR}/${LIB_NAME} -output ${TEMP_DIR}/${LIB_NAME}
    lipo -info ${LIB_NAME}
    이렇게 해서 기본 적 인 컴 파일 합병 작업 을 완 성 했 지만 게 으 른 프로그래머 에 게 는 아직 부족 합 니 다.그러면 저 는 머리 파일${CONFIGURATION}파일 을 각각 복사 한 다음 에 디 렉 터 리 아래 에 놓 아야 합 니 다.그럼 스 크 립 트 를 계속 써 서 스 크 립 트 를 완성 하 세 요.
    
    #      .a        
    ##  SDK  
    pushd ${TEMP_DIR}
    if [[ -d ${LIB_STATIC_NAME} ]]; then
    rm -fR ${LIB_STATIC_NAME}
    fi
    
    mkdir -p ${LIB_STATIC_NAME}
    
    ##  .a    
    cp -fR ${LIB_NAME} ${LIB_STATIC_NAME}
    rm -fR ${LIB_NAME}
    
    cp -f ${IPHONE_SIMULATOR_DIR}/include/${LIB_STATIC_NAME}/* ${LIB_STATIC_NAME}
    같은 폴 더 에 넣 었 지만 SDK 를 사용 하 는 사용자 에 게 보 낼 때 는 압축 패 키 지 를 사용 해 야 합 니 다.압축 도 자동화 해.
    
    #   zip  
    PACKAGE_DATE=`date '+%Y%m%d%H'`
    GIT_VERSION=`git log --abbrev-commit|head -1|cut -d' ' -f 2`
    
    SDK_ZIP_NAME=iOS_${LIB_STATIC_NAME}_${PACKAGE_DATE}_${GIT_VERSION}_${CONFIGURATION}.zip
    
    zip -qr ${SDK_ZIP_NAME} ${LIB_STATIC_NAME}
    물론 너 도 계속 대본 을 쓸 수 있어...압축 가방 을 필요 한 사람 에 게 자동 으로 보내다.
    스 크 립 트 전체 코드
    
    #!/bin/sh
    
    # build_TestSDK_script.sh
    # TestSDK
    #
    # Created by jianquan on 2016/11/16.
    # Copyright © 2016  JoySeeDog. All rights reserved.
    
    PROJ=${PROJECT_NAME}.xcodeproj
    LIB_STATIC_NAME=TestSDK #             
    TEMP_DIR=~/XcodeTestTempBuild#          ,      
    
    
    IPHONE_OS_DIR=${TEMP_DIR}/${CONFIGURATION}-iphoneos
    IPHONE_SIMULATOR_DIR=${TEMP_DIR}/${CONFIGURATION}-iphonesimulator
    
    #         
    if [[ ! -d ${IPHONE_OS_DIR} ]]; then
    mkdir -p ${IPHONE_OS_DIR}
    fi
    
    #          
    if [[ ! -d ${IPHONE_SIMULATOR_DIR} ]]; then
    mkdir -p ${IPHONE_SIMULATOR_DIR}
    fi
    
    
    #       
    xcodebuild -project ${PROJ} \
    -scheme ${LIB_STATIC_NAME} \
    -configuration ${CONFIGURATION} \
    -sdk iphoneos \
    clean \
    build \
    CONFIGURATION_BUILD_DIR=${IPHONE_OS_DIR}
    # -archivePath ${IPHONE_OS_DIR}
    
    #        
    xcodebuild build -project ${PROJ} \
    -scheme ${LIB_STATIC_NAME} \
    -configuration ${CONFIGURATION} \
    -sdk iphonesimulator \
    clean \
    build \
    CONFIGURATION_BUILD_DIR=${IPHONE_SIMULATOR_DIR}
    # -archivePath ${IPHONE_SIMULATOR_DIR}
    
    
    #      
    LIB_NAME=lib${LIB_STATIC_NAME}.a
    
    #            
    lipo -create ${IPHONE_OS_DIR}/${LIB_NAME} ${IPHONE_SIMULATOR_DIR}/${LIB_NAME} -output ${TEMP_DIR}/${LIB_NAME}
    lipo -info ${LIB_NAME}
    
    
    #      .a        
    ##  SDK  
    pushd ${TEMP_DIR}
    if [[ -d ${LIB_STATIC_NAME} ]]; then
    rm -fR ${LIB_STATIC_NAME}
    fi
    
    mkdir -p ${LIB_STATIC_NAME}
    
    ##  .a    
    cp -fR ${LIB_NAME} ${LIB_STATIC_NAME}
    rm -fR ${LIB_NAME}
    
    cp -f ${IPHONE_SIMULATOR_DIR}/include/${LIB_STATIC_NAME}/* ${LIB_STATIC_NAME}
    
    
    #   zip  
    PACKAGE_DATE=`date '+%Y%m%d%H'`
    GIT_VERSION=`git log --abbrev-commit|head -1|cut -d' ' -f 2`
    
    SDK_ZIP_NAME=iOS_${LIB_STATIC_NAME}_${PACKAGE_DATE}_${GIT_VERSION}_${CONFIGURATION}.zip
    
    zip -qr ${SDK_ZIP_NAME} ${LIB_STATIC_NAME}
    읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

    좋은 웹페이지 즐겨찾기