요즘에 거의 대부분의 앱들은 오픈소스(GitHub와 같은 곳에서 )를 이용해 개발한다.

이렇게 오픈소스를 이용해 만들어진 앱은 각각의 라이센스에 따라 표기 해줘야 하는데 대부분은 헬프나 설정화면에 오픈소스정보항목을 만들어 사용되어진 라이센스정보를 표시해준다.

그럼 라이센스정보화면을 간단히 만들어보자.


.h파일

/**

 * @brief ライセンス情報画面コントローラー

 */

@interface OpenSourceViewController : UIViewController {

    

    IBOutlet UIWebView *licenseWebview;

}


@end


 

.m파일

- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view.

    

    [self initControls];

}


- (void)initControls {

    

    NSString *path = [[NSBundle mainBundle] pathForResource:@"license" ofType:@"html"];

    [licenseWebview loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]]];

}


-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {

    

    if ( inType == UIWebViewNavigationTypeLinkClicked ) {

        [[UIApplication sharedApplication] openURL:[inRequest URL]];

        return NO;

    }

    

    return YES;

}



.html파일(라이센스정보)

<html>

<body>

    <H3>

        AFNetworking

    </H3>

    <p>

    Copyright (c) 2011 Gowalla (<a href="http://gowalla.com/">http://gowalla.com/</a>)<br>

    Permission is hereby granted, free of charge, to any person obtaining a copy

    of this software and associated documentation files (the "Software"), to deal

    in the Software without restriction, including without limitation the rights

    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell

    copies of the Software, and to permit persons to whom the Software is

    furnished to do so, subject to the following conditions:<br>

    <br>

    The above copyright notice and this permission notice shall be included in

    all copies or substantial portions of the Software.<br>

    <br>

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE

    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER

    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,

    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN

    THE SOFTWARE.<br>

    </p>


</body>

</html>


만들어진 화면.






Posted by 악당잰 트랙백 0 : 댓글 0

댓글을 달아 주세요

개발중인 앱이 런타임중에 먹통이 되는 현상이 발생하여 디바이스 로그를 까봤더니 <Error>: Max open files: 78 라는 놈이 다량으로 출력되어 있었다.


앱이 먹통이 되는 문제가 이 에러랑 직접적인 관련은 없을거라 생각하면서도 저 찝찝한 에러로그 때문에 원인을 찾아보기로 했다.

가볍게 시작한 일이 하루종일 삽질이되고...

 모든문제를 해결해주는 전지전능한 스택플로우 마저도 명확한 답이 없었다. 있다 싶으면 케이스별로 다 답변도 달랐다.


찾아보면 찾아볼수록 심오한 Objective-C의 세계로 빠져들어 포기하려던 찰나 우연치 않게 해결할 수 있었다.

문제는 뚱딴지 같이 Provisioning설정..

빌드셋팅에서 프로비져닝을 정성것 다시 설정해주니 그 지저분한 에러가 싹 없어졌다.


하루종일 삽질해서 해결됬으니 다행이지만.. 아직도 먹통이되는 문제는 미해결.



Posted by 악당잰 트랙백 0 : 댓글 0

댓글을 달아 주세요

XCode로 로 개발중에 C++로 개발된 모듈을 추가해야 할 일이 생겼다.

어차피 Objective-C도 C언어에서부터 나온거라 그냥 추가해주면 될줄 알았지만 당연하게도XCode는  에러를 뱉어내면서 저항을 했다.

나중에 이런작업을 또 할까... 없을거라 생각되지만 혹시나 해서 잊어버리기전에 블로그에 적어놓자.

인터넷을 찾아본 결과 몇가지 설정이 필요하고 XCode에 필요한 규칙이 있었다.


먼저 샘플 cpp 파일을 만들어보자. 파일추가에서 아래와같이 선택하면 간단히 템플릿이 만들어진다.



추가된 파일에 cpp형식으로 샘플코드를 넣어보자.


Sample.h 와 Sample.cpp파일            

 


자..이제 실제로 뷰 콘트롤러에서 불러보자.

참고로 cpp파일을 이용하기 위해서는 ViewController.mm와 같이 확장자를 mm 으로 변경 해 주어야 한다.



Hello 함수가 정상적으로 잘 호출되었다.



그러나.. 실제 프로젝트에 적용하니 또다시 XCode에서 반항하며 알수없는 에러들을 내뱉었다.

인터넷으로 여기저기 알아본 결과 스택플로우에서 해결방법 발견!

http://stackoverflow.com/questions/6913637/xcode-4-2-c0x-libc-cannot-find-iostream


읽어보니 이유는 모르겠지만 설정을 두군데 정도 손으 봐야 한다.

Build Settings에서 C++ Standrad Library 를 libstdc++로 변경 그리고 Compile Sources As 를 Objective-C++로 바꿔준다.



어쨋든 성공은 했으니 좋다.



Posted by 악당잰 트랙백 0 : 댓글 2

댓글을 달아 주세요

  1. addr | edit/del | reply BlogIcon 곱게자란녀석 2015.01.11 17:16 신고

    안녕하세요. 같은 문제에 봉착하였는데.. 전 해결이 안되서.. 여쭤보려고 문의드렸습니다.
    전 c 파일과 cpp 파일을 전부 사용해야 하는 경우인데요.. Apple Mach 0 linker error 를 자꾸 내뱉습니다.
    cpp로 작성된 함수명들에 대해 에러를 내뿜고 있구요.
    댓글엔 그림을 넣을 수 없어 제가 다른곳에 질문글 올렸던 링크도 같이 드립니다...
    http://www.clien.net/cs2/bbs/board.php?bo_table=cm_app&wr_id=12324

    • addr | edit/del BlogIcon 악당잰 2015.01.11 19:07 신고

      도움이 될지는 모르겠으나 제가 아는 한도내에서 답변을 드리자면..

      C, C++로 만들어진 정적 라이브러리를 이용하시나요?
      그렇다면 arm64를 적용하지 않은채 빌드된 라이브러리에선 캡쳐와 같은 에러가 발생한 경험이 있습니다.
      라이브러리를 arm64용으로 빌드해서 달라고 하면 됩니다.

      c, cpp 파일을 직접 프로젝트에 넣어서 사용하신다면 캡쳐에러만 가지고는 알수가 없네요.
      다만, objective-c 에서는 기본적으로 c++은 그냥그대로 사용 못하는걸루 알고 있구요. c의 경우도 구조체 같은 경우 ARC를 먹지 않기 때문에
      결국은 오브젝티브C용으로 랩핑을 해줘야 합니다.

      도움이 되었는지 모르겠네요..