iOS 에서 패키지.framework 및 사용 방법 에 대한 상세 한 설명
6222 단어 ios포장 하 다.framework
이 문 제 는 iOS 를 하 는 사람들 이 모두 답 을 알 고 있다 고 믿는다.우리 의 일상적인 개발 에 있어 서 이미 봉 인 된 각종 라 이브 러 리,예 를 들 어 알 리 페 이,위 챗 SDK 등 중의 라 이브 러 리 를 자주 사용 하 는데 이런 라 이브 러 리 는 우리 의 개발 에 큰 편 의 를 가 져 다 줄 수 있다.때때로 업무 의 수요 로 인해 우 리 는 자신의 프로젝트 를 봉인 하고 라 이브 러 리 를 생 성하 여 다른 사람의 사용 을 편리 하 게 해 야 한다.여기 서 좋 은 블 로 그 를 참고 하면 서 우리 가 자주 보 는'프레임 워 크'를 정리 해 보 자.
그럼'라 이브 러 리'가 뭐 죠?
'라 이브 러 리'는 프로그램 코드 를 공유 하 는 방식 입 니 다!동업자 가 정리 한 이 말 은 매우 간단 하고 그 역할 을 잘 설명 했다!
일반적으로'정적 라 이브 러 리'와'동적 라 이브 러 리'로 나 뉜 다.
'정적 라 이브 러 리'와'동적 라 이브 러 리'는 어떤 차이 가 있 습 니까?
"정적 라 이브 러 리" 링크 를 실행 가능 한 파일 로 복사 할 때 여러 번 사용 하면 여러 번 복사 합 니 다.
"동적 라 이브 러 리" 링크 를 복사 하지 않 습 니 다.프로그램 이 실 행 될 때 시스템 동적 으로 메모리 로 불 러 옵 니 다.프로그램 이 호출 될 수 있 습 니 다.시스템 은 한 번 만 불 러 옵 니 다.여러 프로그램 이 함께 사용 하고 메모 리 를 절약 합 니 다!
iOS 에서 정적 및 동적 라 이브 러 리 형식
정적 라 이브 러 리 형식:a 와.framework
동적 라 이브 러 리 형식:.dylib 와.framework
a.a 와.framework 는 어떤 차이 가 있 습 니까?
a.a 는 순수 바 이 너 리 파일 입 니 다.framework 에는 바 이 너 리 파일 외 에 도 자원 파일 이 있 습 니 다.
a.파일 을 직접 사용 할 수 없습니다.적어도.h 파일 의 조합 이 있어 야 합 니 다.framework 파일 은 직접 사용 할 수 있 습 니 다.
.a + .h + sourceFile = .framework。
그래서 저 희 는'프레임 워 크'를 추천 합 니 다.
다음은 저희 가 실제 사례 를 통 해서 직접 만들어 보도 록 하 겠 습 니 다.
우 리 는 먼저 이 FrameWork 를 만들어 야 합 니 다.다음 그림 에 따라:
우 리 는 이 FrameWork 를 만 들 었 습 니 다.이 FrameWork 의 구 조 를 보 세 요.
쇼 NSlog 클래스 를 간단하게 추 가 했 고 FrameWorkTest.boundle 파일 을 추 가 했 습 니 다.이 클래스 에 어떤 내용 을 썼 는 지 보 세 요.
#import "ShowNSLog.h"
@implementation ShowNSLog
+(void)showLog{
NSLog(@" ");
}
+(NSString *)showLogWithReturn{
return @"zhouzhou.jpg";
}
@end
다음은 우리 의 이.framework 정적 라 이브 러 리 에 대해 간단 한 설정 을 할 것 입 니 다.다음 그림 과 같 습 니 다.1.먼저 Dead Code Stripping 을 NO 로 설정 합 니 다.인터넷 에서 이 항목 에 대한 설명 은 다음 과 같 습 니 다.대체적으로 이 항목 을 열 면 코드 의'dead','unreachable'코드 에 대한 여과 입 니 다.그러나 이 스위치 가 닫 히 는 지 여 부 는 큰 영향 을 미 치지 않 는 것 같 습 니 다.그러나 framework 의 코드 를 완전 하 게 복원 하기 위해 이 항목 을 닫 는 것 도 불가능 하지 않 습 니 다.
2.그리고 Link With Standard Libraries 를 닫 습 니 다.중복 링크 를 피하 기 위해 서 라 고 생각 합 니 다.
3.마지막 으로 Mach-O Type 을 Static Library 로 설정 합 니 다.framework 는 동적 라 이브 러 리 일 수도 있 고 정적 라 이브 러 리 일 수도 있 습 니 다.시스템 의 framework 는 동적 라 이브 러 리 이 고 사용자 가 만 든 framework 는 정적 라 이브 러 리 일 수 있 습 니 다.
다음 설정 은 우리 가 공개 해 야 할 헤더 파일 을 설정 하 는 것 입 니 다.다음 그림 설정 과 같 습 니 다.
공개 할 클래스 를 FrameWorkTest.h 에 추가 하 는 것 도 기억 해 야 합 니 다.예 를 들 어 다음은 우리 의 예 입 니 다.
#import
//! Project version number for FrameWorkTest.
FOUNDATION_EXPORT double FrameWorkTestVersionNumber;
//! Project version string for FrameWorkTest.
FOUNDATION_EXPORT const unsigned char FrameWorkTestVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import
//
#import
마지막 으로 해 야 할 일 은 우리 의 이 FrameWork 를 포장 제작 하 는 것 이다.command+B 는 다음 그림 의 선택 에 따라 FrameWork 를 포장 합 니 다.
이 럴 때 FrameWork 프로젝트 의 Products 파일 이 우리 의.framework 파일 보다 많아 진 것 을 볼 수 있 습 니 다.Show in Finder 는 다음 과 같은 두 개의 폴 더 를 한눈 에 볼 수 있 습 니 다.하 나 는 진짜 컴퓨터 이 고 하 나 는 아 날로 그 컴퓨터 입 니 다.
다음은 우리.framework 파일 을 만 드 는 마지막 단계 입 니 다.터미널 을 이용 하여 아 날로 그 기기 와 실제 컴퓨터 의 파일 을 하나 로 합 칩 니 다.
위의 그림 에 표 시 된 FrameWorkTest 파일 을 다음 작업 을 수행 합 니 다.
터미널 에 명령 입력:lipo-create 아 날로 그 기기 와 실제 기기 의 FrameWorkTest 파일 경로(터미널 에 직접 끌 면 표 시 됩 니 다)-output 출력 경로
구체 적 인 예 는 다음 우리 단말기 의 정 보 를 봅 시다.
메모:그 다음 에 생 성 된 것 은'lipo 파일'입 니 다.이 럴 때 당신 이 해 야 할 일 은 이름(접 두 사 를 지 우 는 것 포함)을 바 꾸 고 실제 컴퓨터 나 아 날로 그 컴퓨터 를 덮어 쓰기 전에 우리 가 합 쳤 을 때의 파일 입 니 다!
그리고 얘 가 썼어 요.
우리 의.framework 파일 은 제작 이 완료 되 었 더 라 도 사용 은 모두 가 알 고 있 을 것 이 라 고 믿 습 니 다.그것 을 우리 의 프로젝트 에 끌 어 들 입 니 다.우 리 는 우리 의 사용 상황 을 보고 우리 의 것 이 OK 라 는 것 을 증명 합 니 다.
참고 로.boundle 파일 의 제작,새 파일 을 만 들 고 접미사 이름 을'boundle 파일'로 바 꿉 니 다.이 때 이 파일 을 직접 열 면 안 됩 니 다.'가방 내용 표시'를 통 해 자원 파일 을 추가 하면 됩 니 다!
우 리 는 우리 의 프로젝트 에서 우리 가 끌 어 들 인 서 류 를 다시 보 았 다.
우 리 는 우리 의.boundle 파일 에 그림 을 한 장 추 가 했 습 니 다.우 리 는 이 그림 의 사용 과 우리 의 이.framework 정적 라 이브 러 리 가 성공 적 으로 사용 할 수 있 는 지 구체 적 으로 살 펴 보 겠 습 니 다.
1:정적 라 이브 러 리 가 져 오기:
2.구체 적 인 사용:
3.우리 의 인쇄 로 그 를 보 세 요.
위 에 있 는 우리 가 사용 하 는 그림 도 정상적으로 나타 날 수 있 습 니 다.우 리 는 더 이상 캡 처 하지 않 고 보 낼 수 있 습 니 다.관심 있 는 것 은 스스로 해 볼 수 있 습 니 다.
마지막 으로 정리 해 야 할 것:
1.framework 나 lib 를 만 들 때 category 를 사용 하면 FMWK 를 바 꾸 는 프로그램 이 실 행 될 때 crash 가 발생 합 니 다.이 때 이 프로젝트 에서 other linker flags 에 두 개의 인 자 를 추가 해 야 합 니 다.-ObjC-allload。(이 점 은 친 측 이 없다)
2.이미지 자원 이 있 는 경우 그림 을 Bundle 파일 로 포장 하고 framework 와 함께 해당 항목 에 복사 해 야 합 니 다.
3.공 개 된 클래스 에서 인 용 된 private 클래스 는 포장 한 후에 대외 적 으로 잘못 보고 할 수 있 습 니 다.private 클래스 를 찾 을 수 없 으 면 private 의.h 를 넣 을 수 있 습 니 다.
4.namespace 충돌.정적 라 이브 러 리 는 특정한 제3자 라 이브 러 리 를 사 용 했 고 프로젝트 도 같은 제3자 라 이브 러 리 를 사 용 했 습 니 다.컴 파일 할 때 Duplicate symbol 오류 가 발생 합 니 다.같은 제3자 라 이브 러 리 가 두 개 있 기 때 문 입 니 다.해결 방법 은 사용 하 는 제3자 라 이브 러 리 에 사용자 정의 접 두 사 를 붙 이 는 것 입 니 다.클래스 이름,delegate 프로 토 콜,상수 이름 을 포함 하고 특히 Category 의 방법 명 을 수정 해 야 합 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.