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]];



Related Posts:

  • [IOS] GCD, BLOCK 사용 Dispatch Queues 비동기 큐 처리  Grand Central Dispatch(GCD)는 큐를 동기/비동기로 처리할수 있도록 도와주는 도구다. 쓰레드를 os 가 자동관리 및 분배해준다. 개발자는 큐에 태스크를 생성해서 넣어주면 OS가 자동으로 태스크들을 실행해주는 방식이다.일단  자바의 쓰레드에 비해 사용하기 쉽다는 거다.Serial Queue : 순서대로 큐의 태스크를 실행한다. 한개가 끝나면 다음 태스크가 실행되는… Read More
  • [iOS] @synchronized 배타 제어 (객체 동시접근 방지)참고: https://dolfalf.tistory.com/145https://aroundck.tistory.com/4705가장간단한건  // self를 키로 락을 검. 어디선가 self로 락을 건경우 락이 해제될 때까지 여기서 기다리게됨.@synchronized (self) {  [_mutableItems addObject:object];}보통 이런식으로도 씀.@i… Read More
  • [Unity] IOS check version 요약OS 버전을 확인하는 방법이 Objective-C라고 귀찮은 방법 밖에없는 것인지라고 생각하고있어, 피곤하고 있으면, 그런 일은 없었기 때문에 소개.환경MacOS 10.12.6Xcode 9.0.1종래의 방법기술 량이 많아 귀찮았.if ([UIDevice currentDevice] .systemVersion.floatValue> = 11.0) { NSLog (@ "iOS11… Read More
  • [iOS] 개발/테스트 배포용 ipa 간단 생성Product->Archive->Distribute App -> Developement ->쭉쭉 다음으로 넘기고실행하는 쪽은 Xcode->Devices and Simulators 에서 ipa던져넣으면 된다.… Read More
  • [ios] object-c 로 framework만들기 Object-c 로 framework만들기ios8 부터는 framework형태로 라이브러리 제작이 가능하다. 이를 cocoapod등에 올리면 cocoapod install명령으로 간단하게 누구나 사용할수있는 라이브리를 만들수 있다.1. 일단 file-> new -> workspace 를  만든다. (MY_IOS_FRAMEWORK폴더로 만들고, my_ios_framewor… Read More

0 comments:

댓글 쓰기