iOS 에서.a 와.framework 정적 라 이브 러 리 의 생 성과.bundle 자원 패키지 의 사용 에 대한 자세 한 설명

머리말
개발 과정 에서 흔히 3 자 라 이브 러 리 를 사용 하여 특정한 기능 을 실현 하 는데 이런 3 자 라 이브 러 리 는 보통 개원 라 이브 러 리 와 폐 원 라 이브 러 리 로 나 뉜 다.소스 라 이브 러 리 를 열 면 소스 코드 를 직접 받 을 수 있 고 자신 이 쓴 것 과 다 를 것 이 없 으 며 우 리 는 소스 코드 를 최대한 수정 하여 자신의 기능 에 적응 할 수 있다.폐 원 라 이브 러 리 는 게시 자가 미리 포장 한 정적 라 이브 러 리 나 Bundle 패키지 입 니 다.이에 대해 우 리 는 내부 실현 을 볼 수 없습니다.봉 인 된 특정한 기능 에 대해 서도 열 린 API 만 호출 하면 됩 니 다.
정식 적 인 코드 에 앞서 먼저 인터넷 에서 수집 한 정적 라 이브 러 리 와 관련 된 기본 개념 을 소개 하여 뒤의 지식 에 대한 이 해 를 깊이 있 게 한다.
1.라 이브 러 리
라 이브 러 리 는 실제 적 으로 코드 공유 방식 으로 코드 재 활용 과 소스 코드 숨 기기 에 사용 되 며 보통 동적 라 이브 러 리 와 정적 라 이브 러 리 로 나 뉜 다.
2.구별
정적 라 이브 러 리:링크 를 실행 가능 한 파일 로 복사 하고 여러 번 사용 하면 여러 개의 중복 복사 가 있 습 니 다.
동적 라 이브 러 리:링크 를 복사 하지 않 습 니 다.프로그램 이 실 행 될 때 시스템 동적 으로 메모리 로 불 러 옵 니 다.프로그램 이 호출 될 수 있 습 니 다.시스템 은 한 번 만 불 러 옵 니 다.여러 프로그램 이 공유 하고 메모리 공간 을 절약 합 니 다.
3.iOS 의 정적 라 이브 러 리 형식
iOS 에서 정적 라 이브 러 리 는 a 와.framework 형식 으로 존재 하고 동적 라 이브 러 리 는.dylib 와.framework 형식 으로 존재 합 니 다.
이 유 는.framework 가 동적 라 이브 러 리 일 수도 있 고 정적 라 이브 러 리 일 수도 있 습 니 다.애플 이 사용자 급 App 에 동적 라 이브 러 리 를 사용 하 는 것 을 금지 하고 자신 은 동적 라 이브 러 리 를 당당 하 게 사용 하기 때문에 iOS 에서 시스템 급.framework 는 동적 라 이브 러 리 이 고 사용자 급.framework 는 정적 라 이브 러 리(어 쩔 수 없 음)입 니 다.
본 고 는 a 와.framework 정적 라 이브 러 리 의 생 성과.bundle 자원 패키지 의 사용 을 설명 합 니 다.
창고.
라 이브 러 리 는 정적 라 이브 러 리 와 동적 라 이브 러 리 두 가지 로 나 뉜 다.본질 적 으로 실행 가능 한 코드 의 바 이 너 리 형식 으로 메모리 에 불 러 와 실행 할 수 있 습 니 다.
정적 라 이브 러 리 와 동적 라 이브 러 리 는 상대 적 인 컴 파일 기간 과 실행 기간 입 니 다.정적 라 이브 러 리 는 프로그램 컴 파일 시 대상 코드 에 연결 되 고 프로그램 이 실 행 될 때 정적 라 이브 러 리 를 바 꿀 필요 가 없습니다.동적 라 이브 러 리 는 프로그램 이 컴 파일 될 때 대상 코드 에 연결 되 지 않 고 프로그램 이 실 행 될 때 만 불 러 옵 니 다.프로그램 이 실 행 될 때 동적 라 이브 러 리 가 필요 하기 때 문 입 니 다.
정적 라 이브 러 리 형식
형식:a 와 프레임 워 크 두 가지
그 중에서.framework 형식의 라 이브 러 리 가 시스템 내부 에 동적 라 이브 러 리 라면 저희 가 만 든 것 은 정적 라 이브 러 리 입 니 다.
a 와.framework 의 차이
a.a 는 순수 바 이 너 리 파일 입 니 다.framework 에는 바 이 너 리 파일 외 에 도 자원 파일 이 있 습 니 다.
a.파일 을 직접 사용 할 수 없습니다.적어도.h 파일 의 조합 이 있어 야 합 니 다.framework 파일 은 직접 사용 할 수 있 습 니 다.
.a + .h + sourceFile = .framework。
프레임 워 크 를 사용 하 는 것 을 권장 합 니 다.
정적 라 이브 러 리 의 장점
4.567917.코드 를 공유 하 는 데 편리 하고 합 리 적 으로 사용 할 수 있 습 니 다4.567917.iOS 프로그램의 모듈 화 를 실현 합 니 다.고정된 업무 모듈 을 정적 라 이브 러 리 로 바 꿀 수 있 습 니 다
  • 코드 라 이브 러 리 를 다른 사람과 공유 하지만 코드 의 실현 을 다른 사람 에 게 보 여주 고 싶 지 않 습 니 다
  • 제3자 sdk 개발 의 수요정적 라 이브 러 리 만 들 기 및 패키지.a 정적 라 이브 러 리
    정적 라 이브 러 리 프로젝트 만 들 기
    iOS --> Framework & Library --> Cocoa Touch Static Library 4
  • 정적 라 이브 러 리 로 컴 파일 해 야 할 코드 를 항목 에 끌 어 옵 니 다
  • 보 이 는.h 파일 을 설정 합 니 다.
    Build Phases-->Copy Files 에.h 파일 을 추가 하면 됩 니 다.




    1.지원 하 는 구조 수정
         4.1 모든 시 뮬 레이 터 구 조 를 지원 하 는 설정 Build Settings-->Build Active Architecture Only-->Debug 를 NO 로 변경
         4.2 모든 핸드폰 구 조 를 지원 하 는 설정
    2.컴 파일
         시 뮬 레이 터 를 컴 파일 하고 휴대 전 화 를 컴 파일 합 니 다.
         .a 파일 과 보 이 는 헤더 파일 을 생 성 합 니 다.
         명령 행 을 사용 하여 방금 생 성 된 두 경 로 를 합 쳐 다른 경로 로 갑 니 다.예 를 들 어:
         lipo-create 시 뮬 레이 터 lib 경로
    3.정적 라 이브 러 리 사용
         메모:이 정적 라 이브 러 리 가 라 이브 러 리 에 의존 해 야 한다 면 의존 라 이브 러 리 를 도입 해 야 합 니 다.
    프레임 워 크 정적 라 이브 러 리 만 들 기 및 포장
    1.프레임 워 크 프로젝트 만 들 기
         iOS --> Framework & Library --> Cocoa Touch Framework
    2.포 장 된 프레임 워 크 가 동적 라 이브 러 리 인지 정적 라 이브 러 리 인지 수정
         프레임 워 크 프로젝트 는 기본적으로 동적 라 이브 러 리 입 니 다.
         정적 라 이브 러 리 설정:Build Settings-->Mach-O Type-->Static Library 로 변경
    3.정적 라 이브 러 리 로 컴 파일 해 야 할 코드 를 항목 에 끌 어 옵 니 다.
         보 이 는 헤더 파일 설정
         프로젝트 생 성 후 프로젝트 에 메 인 헤더 파일 이 하나 밖 에 없습니다.
         빌 드 단계-->Headers-->public 헤더 파일 추가
    4.컴 파일
         시 뮬 레이 터 를 컴 파일 하고 핸드폰 을 컴 파일 합 니 다.
    5.사용
         프레임 워 크 를 프로젝트 에 도입 하 다.
         동적 라 이브 러 리 라면 Genel-->Embedded Binaries 에 설정 을 도입 해 야 합 니 다.
         정적 라 이브 러 리 라면 설정 할 필요 가 없습니다.
    정적 라 이브 러 리 문제
    1.정적 라 이브 러 리 위치 Debug 에서 실제 컴 파일 을 실행 하면 정적 라 이브 러 리 를 Debug-iphoneos 디 렉 터 리 에 생 성 합 니 다.
       Debug 실행 시 뮬 레이 터 컴 파일 은 정적 라 이브 러 리 를 Debug-iphonessimulator 디 렉 터 리 에 생 성 합 니 다.
       Release 에서 실제 컴 파일 을 실행 하면 정적 라 이브 러 리 를 Release-iphonos 디 렉 터 리 에 생 성 합 니 다.
       Release 실행 시 뮬 레이 터 컴 파일 은 정적 라 이브 러 리 를 Release-iphonessimulator 디 렉 터 리 에 생 성 합 니 다.
    2.Debug 버 전 VS 릴 리 스 버 전
       디 버 깅 버 전
          디 버 깅 버 전 은 디 버 깅 에 편리 하도록 완전한 기호 정 보 를 포함 할 것 이다.
          디 버 깅 버 전 은 코드 를 최적화 하지 않 습 니 다.
       배포 판
          발표 버 전 은 완전한 기호 정 보 를 포함 하지 않 습 니 다.발표 버 전의 실행 코드 는 최적화 되 었 습 니 다.
          발표 버 전의 크기 는 디 버 깅 버 전보 다 약간 작 을 것 입 니 다.
          실행 속도 에 있어 서 디 버 깅 버 전이 더 빠 를 것 이지 만 현저 한 향상 이 있 을 것 이라는 것 은 아니다.
    3. Undefind symbols for architecture arm64(i386)
       원인:정적 라 이브 러 리 가 cpu arm 64(i386)구 조 를 지원 하지 않 기 때 문 입 니 다.
    4.아이 폰 의 cpu 구조
       시 뮬 레이 터
          iPhone 4s,5 는 i386 구조 입 니 다.
          아이 폰 5s 이후 x8664 구조
       배포 판
          아이 폰 1 세대,3G,3GS 는 armv 6 구조
          아이 폰 4,4s 는 armv 7 구조 입 니 다.
          아이 폰 5,5s,5c 는 armv7s 구조
          iPhone 6,6s,6plus,6splus 는 arm 64 구조 입 니 다.
    5.a 라 이브 러 리 가 지원 하 는 구조 유형 보기
       lipo -info xxx.a
    6.a 정적 라 이브 러 리 통합
       lipo-create 컴퓨터 정적 라 이브 러 리.a 시 뮬 레이 터 정적 라 이브 러 리.a-output 새 파일.a
       (디 렉 터 리 를 지정 하 는 것 이 좋 습 니 다.그렇지 않 으 면 현재 디 렉 터 리 를 기본 으로 합 니 다)
       Debug 버 전 만 합병 하거나 Release 버 전 만 합병 하면 됩 니 다.
    7.프레임 워 크 라 이브 러 리 가 지원 하 는 구조 유형 보기
       7.1 프레임 워 크 폴 더 에 들 어가 기
       7.2 lipo-info Framework 를 사용 하면 됩 니 다.
    정적 라 이브 러 리 컴 파일 오류
    1.MRC 오류:autorelease,release,retain 등의 오 류 를 많이 알려 줍 니 다.
       솔 루 션:이 파일 을 MRC 로 컴 파일 하거나 프로젝트 를 MRC 환경 으로 변경 합 니 다.
    2.헤더 파일 컴 파일 에 시스템 라 이브 러 리 가 없습니다.설정:Build Settings-->Header Search Paths 검색-->설정$(SDKDIR)/usr/include/libxml2
    3.framework 프로젝트,이름 에 특수 문 자 를 가지 고 있 으 면 안 됩 니 다test-framework is not a valid PROJECT_NAME라 이브 러 리 의존 오류
    1._SCNetWork 시작
       가 져 오기
    2._UITypeCopy 시작+kUITag 시작
      가 져 오기
    3._defalate 시작+인플레 이 트 시작
      libz.tbd 가 져 오기
    4._xml 시작
      libxml 2.tbd 가 져 오기
    정적 라 이브 러 리 실행 오류 도입
    1.실행 충돌
    정적 라 이브 러 리 내부 오류 가 아니라면 항목 의 Build Settings-->Other Linker Flags-->는-ObjC 로 설정 합 니 다.
    자원 정적 라 이브 러 리.bundle
    1.폴 더 만 들 기
    2.자원(그림,plist...)을 폴 더 에 저장
    3.폴 더 접 두 사 를 bundle 로 바 꾸 면 됩 니 다
    4.자원 라 이브 러 리 사용
    정적 라 이브 러 리 에서 자원 을 얻 는 방식 을 이 bundle 자원 패키지 에서 얻 으 면 됩 니 다.
    예 를 들 면SystemConfiguration.framework테스트 가능 한 정적 라 이브 러 리 만 들 기
    1.항목 만 들 기
    2.프로젝트 에 정적 라 이브 러 리 Target 추가
    3.정적 라 이브 러 리 컴 파일
    4.인용 정적 라 이브 러 리 설정
       General-->Linked Frameworks and Library-->정적 라 이브 러 리 추가.a
    5.프로젝트 실행-이렇게 하면 디 버 깅 할 수 있 습 니 다.
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기