2019년 10월 21일 월요일

Cocoa Touch Framework 을 이용해서 공통모듈 만들기

안드로이드에서 aar 화일을 만들어 쓰듯이, Xcode 6 부터는 개발자가 Framework 프로젝트를  만들어서 여러프로젝트에 공통으로 사용할수 있도록 되었다.

1.일단 워크스페이스부터 따로 만든다.
2.새 프로젝트를 만들어야 하는데 [cocoa touch framework] 를 선택해서 새로 만든다.
 맨 마지막 프로젝트 폴더 선택하는 부분에서  add to 와 group 선택박스를 아까 생성한 워크스페이스로 선택한다.
3.프로젝트 구성을 보면 프레임헤더화일, 테스트 , 프로덕트가 있고 안에 .framework 파일이 있는데 아직 빌드를 안해서 빨강색이다.
4.프레임헤더를 열어보면 맨마지막줄에 public , 공개로 사용할 헤더를 적어주면 외부에서 해당 기능을 사용할수 있게된다라고 되어있다.
#import <myframework/Car.h> 라고 하자
5.이제 새화일->코코아터치 클래스 를 선택해서 Car.h , Car.m 을 만들자.
6.car 클래스는 평소대로 하고싶은 코딩을 한다.
7.이제 중요.
8. Car.h 를 선택하면 오른쪽 속성 판넬에 [Target MemberShip] 항목에 프레임이름과 private|public|project 가 있다.  외부에서  car 클래스에 접근하려면  하려면 public 으로 해야 된다.
9.그위의 Location 도 Relative to Group 으로 지정한다.
10. 왼쪽의 프로젝트 파란 놈을 클릭하고 항목에서 [Build Active Architecture Only] 를 No 로 해주어야 다른 플랫폼에서도 작동할수 있게된다.
11.프레임워크 프로젝트에서 빌드를 한다. 이떄 호환성을 위해서 에디터 상단의 빌드 디바이스를 [제너릭 디바이스] 로 지정하고 빌드한다.
12.왼쪽의 products/myframework.framework 파일이 생성되면 왼쪽으로 가는 화살표를 클릭해서 해당 폴더에서 파일을 복사해논다.
13.이제 아까만든 프레임워크를 사용할 프로젝트를 만든다. 워크스페이스, 프로젝트 폴더는 따로 만들어서 완전히 새로운 프로젝트를 구성한다.
14.새로운 프로젝트를 만들었으면 프레임워크를 보관할 임의의 폴더(그룹)를 만든다(임시로 framework 라고 만들었다. )
15. 만든 폴더에 아까의 프레임워크를 붙여넣는다.
16. 프레임워크를 사용하려면 m 파일에서 프레임워크에서 공개(public)으로 지정한 헤더를 임포트해서 해당 클래스를 사용하면된다.

#import <myframework/Car.h>
...
    Car *car = [[Car alloc] initWithName:@"audi"  year:1990];
    [car info];
17.이상태에서 빌드시에 에러가 나오기도 하는데  x86_64 관련에러는 프레임워크로 돌아가서 프로젝트 설정에 [Build Archtecture Active Only] 를 No 로 설정하고 다시 빌드후에 라이브러리를 다시 현재 작업 프로젝트에 던져 놓으면 된다.
18.이제 실행을 시켜보면  image not found 이 나온다.
18. 속성의 general 항목의ㄹ embedded binaries 항목에 myframework.framework을 추가하면 된다.

 x86_64  관련 에러가 계속 뜨고, 삽질을 계속함..

참고사이트

http://theeye.pe.kr/archives/2254
https://qiita.com/kakipo/items/3cd87e00bc96bc3888b2
https://qiita.com/sachiko-kame/items/be548a7942e6c22a1828

정적라이브러리형태로 배포하기
http://theeye.pe.kr/archives/2750


-추가로 framework 파일에 이미지등을 넣고 싶을때는 이렇게 해본다
1.프로젝트폴더밑에 jpg/testimg.png 를 만들고 넣는다.
2.프로젝트속성 Build Phases에 Copy Files 속성을 추가하고 jpg 폴더를 던져넣는다. 그리고 Destination 은 Frameworks 로 지정한다.
3.프레임워크의 파일내에서 해당 이미지를 사용해본다.

-(UIImage*)image2
{
    NSBundle *b = [NSBundle bundleForClass:[self class]];
    return [UIImage imageNamed:@"Frameworks/jpg/img.png" inBundle:b compatibleWithTraitCollection:nil];

}
4. 빌드한다.
5.사용하고자 하는 프로젝트에서 프레임워크내의 메소드를 호줄해서 UIImageView에 적용해본다.


    [_img setImage:[car image2]];



0 comments:

댓글 쓰기