2015년 2월 2일 월요일

iOS 팁 여러개( sqlite, html, adhoc distribute, NSNotificationCenter, UIColor rgb

sqlite 테이블 리스트 보기

select name from sqllite_master where type ='table';

html text를 lalbel에 보이게 하려면

NSString *htmlString =[NSString stringWithFormat:@"%@", [[self.arrMessageData objectAtIndex:indexPath.row] objectAtIndex:indexOfMessage]];
    NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
   cell.messageLabel.attributedText = attributedString;

html을 일반 plain text로 변경 하려면

- (NSString *)flattenHTML:(NSString *)html {
 
    NSScanner *theScanner;
    NSString *text = nil;
    theScanner = [NSScanner scannerWithString:html];
 
    while ([theScanner isAtEnd] == NO) {
     
        [theScanner scanUpToString:@"<" intoString:NULL] ;
     
        [theScanner scanUpToString:@">" intoString:&text] ;
     
        html = [html stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@>", text] withString:@""];
    }
 
    html = [html stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
 
    return html;
}


adhoc 배포

http://blog.saltfactory.net/242

드랍박스에 디렉토리를 만들고
거기에 ipa 파일  아카이브 할때 adhoc으로 한다.
물론 이에 필요한 provisioning이 필요 하다.
이렇게 해서 생성한 ipa파일과
.plist 파일이 필요 하다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>https://드랍박스 .ipa링크를 생성해서 붙인다.</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.ssomon.InaschoolTeacher</string>
<key>bundle-version</key>
<string>1.0</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>InaschoolTeacher</string>
</dict>
</dict>
</array>
</dict>
</plist>



<a href="itms-services://?action=download-manifest&url=드랍박스 plist의 링크를 붙여서 html
파일을 만든다.
www.ropbox.com -> dl.dropboxusercontent.com 으로 변경 한다.







객체간 자료 전송 

http://blog.naver.com/iss6388/10183297308
--> 노티가 왓을때 다른 viewController에게 알리는 코드를 응용 할수 있다.
NSNotificationCenter postNotificationName으로 전송 (NSDictionary를 전송하고)

이를 다른 ViewController에서 받아서 처리 하도록 한다.

전송 예제
    [[NSNotificationCenter defaultCenter]
     postNotificationName:@"UIApplicationDidReceiveRemoteNotification"
     object:self

     userInfo:nil];

받는곳
viewDidLoad에서 등록
    [[NSNotificationCenter defaultCenter]
     addObserver:self
     selector:@selector(didReceiveRemoteNotification:)
     name:@"UIApplicationDidReceiveRemoteNotification"
     object:nil];

viewDidUnload에서 해제
    [[NSNotificationCenter defaultCenter]
     removeObserver:self
     name:@"UIApplicationDidReceiveRemoteNotification"
     object:nil];

이렇게 하면 UiApplicationDidReceiveRemoteNotification이 호출 된다.


rgb 칼라를 UICrolro 매크로

http://winplz.tistory.com/entry/UIColor-간단히-Macro로-사용하기
#define RGB(r, g, b) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1]

cell.textLabel.textColor = RGB(0x60,0x60,0x60);


2015년 1월 27일 화요일

iOS multi target code reuse


https://www.itexico.com/blog/ios-mobile-development-using-xcode-targets-to-reuse-the-code

예전에 앱을 처음 만들던 시기에는 광고를 붙이고 무료 앱
광고가 없는 1$ 유료 앱을 이렇게 항상 두개를 만들었다.

자연스럽게 하나의 코드로 #if ~ #else ~ #end
를 하면서 무료 앱인 경우 추가로 iAD, Cauly 코드를 추가 했다.
당연히 앱스토어에 다르게 올라가야 하므로 번들provisioning도 두개 필요 하다.

지금은 너무 오래되어서 이런 절차가 잘 기억이 나지 않아 찾아 보니 잘 정리가 되어 있다.

최신 Xcode에서 이러한 작업에 대한 자세한 절차를 기술해 놓은 페이지 링크를 걸어둔다.

이러한 작업은 유료 무료 뿐만 아니라 비슷한 앱을 다른 앱으로 만들때 유용하다.

2015년 1월 23일 금요일

sqlite를 iOS app에 이용하기 위한 방법 정리

알바 하며 얻은 내공들을 기록 한다.
알바로 하면 급하게 지식을 습득한다.
그냥 취미 삼아 할 때와 다르게 일정과 시간에 쪼들리며 결국은 해답을 찾게 되어 있다.


sqlite 스키마 보기

SELECT sql FROM sqlite_master WHERE name = 'tablename';

sqlite 프롬프트 나가기 

.exit

primary key

id integer primary key 라고 만들고 데이터를 넣지 않고 insert 하면
자동으로 증가 하며 insert 한다.

tableview custom cell 작업

http://www.ioscreator.com/tutorials/customize-tableviewcells-with-storyboards

sqlite와 tableview 연동 샘플 코드

http://www.appcoda.com/sqlite-database-ios-app-tutorial/

sqlite api의 리턴 값을 BOOL 변수로 받아 오류가 있다.
int로 리턴 값을 받아야 올바르게 동작 한다.

2015년 1월 13일 화요일

최근 iOS 개발을 하면서 알게된 tip들 기록

한 동안 iOS 개발에 손을 놓고 있다가 하려 하니 강산도 바뀌고 코드도 바뀌고
storyBoard도 사용해야 하고 어질 어질 하다. @.@


1. WebView에서 back 버튼을 만들고 back을 하다가 최초의 페이지에서 back 버튼을 누르면
이전 ViewController로 가려면

==>
- (IBAction)goBack:(id)sender {
    if ([ webView canGoBack])
    {
        [webView goBack];
    }
    else
    {
        [self.navigationController popViewControllerAnimated:YES];
    }
}

2. 조건에 따라 여러 segue중에 선택하여 viweController 전환
==>
if ( /* condition */ )
{
    [self performSegueWithIdentifier:@"XXXSegue" sender:sender];
}
else
{
    [self performSegueWithIdentifier:@"YYYYSegue" sender:sender];
}

3. 숫자를 문자열로 바꾸는 기존 코드는 이제 동작하지 않는다.

NSstring * str = [NSString stringWithFormat:@"%d", num];

==>
NSString * str = [[NSNumber numberWithInt:num] stringValue];


2015년 1월 12일 월요일

iOS altertView가 아닌 커스텀 팝업 view 만들기

스토리 보드를 처음으로 사용하다 보니 삽질을 하고 있다.
popover는  iPad에서만 되는 것으로 보인다.

iPhone app은 모든 viewController가 전체 화면으로 구현 해야 하는 것 같다.

storyboard에 어떻게 view 만을 정의 하고 그 것을 현재 viewController에 view에 추가 하느냐?

결론은 안되더라

현재 알바로 의뢰 받아 작업중인 앱에 디자인 가이드에서는 표준 alertView가 아닌
팝업 창이 디자인 되어 있으며

이 팝업 창이 뜰때 기존에 보이던 viewController의 전체 view는 dark색이 65% alpha 값으로
가려져야 하는게 미션이다.

구현 방법은 정답은 아닐수 잇으며 여러 삽질에 삽질 끝에 구현한 방법이다.


스토리 보드에 추가 하려는 viewController의 디자인을 마무리 한다.

 스토리 보드에 새로운 viewController를 추가 한 다음 어떠한 방법으로도 iphone에서는
pop을 할수 없음을 깨달았다. 그러므로 바로 포기하고 새파일을 만든다.
오래된 방법인 xib를 추가한다.

디자인을 한다.
포인트는 View를 추가해서 투명도 65%에 검정 뷰를 하나 추가 한다.

소스를 추가 해서 NotiView라는 클래스 파일과 헤더 파일을 작성 한다.

xib를 초기화 하는 init 코드가 필요 하다.
- (id) initWithCoder:(NSCoder *)aDecoder {
    if(self = [super initWithCoder:aDecoder]) {
        [[NSBundle mainBundle] loadNibNamed:@"NotiView" owner:self options:nil];
        [self addSubview:view];
    }
    return self;

}


닫기 버튼을 구현 하였다면 버튼을 IBAction을 연결 하고 다 음과 같은 코드로
뷰를 보이지 않게 할 수 있다.
#pragma -IB Action -

- (IBAction)CloseButtonClick:(id)sender {
    [self setHidden:YES];

}



스토리 보드로 돌아 와서 추가하려는 viewController에 view를 추가 하고 가장 하위 바닥에
viwe를 넣는다.
그리고 그 view의 클래스 파일을 NotiView로 연결 한다.


Hidden을 YES로 설정 하고 NotiView 를 IBOutlet으로 연결 하여 코드에서 Hidden을 NO
로 하여 팝업 창이 나타나는 효과를 내준다.



2014년 12월 30일 화요일

Acer iconia one 7 (B1-750) review

나의 첫 안드로이드 기기 되겠다.
캐논 이벤트 상품으로 받았다.

캐논 EOS70D 구매에 대한 사은품인데 가격이 17만원이라고 하지만 이걸 17만원 주고
살 사람은 없을것 같고

그렇다고 이걸 중고로 팔기도 모하고 애매 모호한
오늘 회사에 들고 가서 넥서스7과 비교 해보니 정말 퀄러티가 떨어진다.

단점을 나열해보면
완성도가 매우 나쁘다.
플라스틱이 들떠 있고 꾹 누르면 들뜬 부분이 소리가 난다.
화면은 강하게 터치하면 색이 변할 정도로 제품에대한 퀄러티는 정말 안좋다.
카메라는 전면이든 후면이든 모두다 꽝이다.
화소를 떠나서 이건 예전 피쳐폰시절에 화질일 프리뷰 화면으로 나오고 찍는 순간
그게 그대로.. 완전 카메라는 전면 후면 모두 달았는지 이해 할수가 없다.
외장 메모리 슬롯은 바로 뚤려 있다. 그 구멍으로 먼지든 머든 다들어갈거 같다. 얼릉 막아야 겠다.

장점을 나열해 보자면
우선 오늘 가볍다. 넥서스7 보다도 훨씬 얇고 가볍다.
그래서 지금처럼 겨울에는 주머니에 쏙들어간다.
출퇴근 하면서 지하철에서 보니 아이패드에 비해 훨씬 가볍고 휴대성이 좋다.
성능이 어느 정도 나온다. 게임도 하지 않고 단순하게 웹서핑이랑  facebook 그리고
DSLR로 찍은 사진을 컴퓨터로 넣고 보고 하는 정도에서는 아주 훌륭하다.
다른 무거운 앱을 실행해 보지 못했지만 간단한 사용상에는 아주 빠릿 빠릿 하니 좋다.

지금 나처럼 캐논 이벤트로 받은 미개봉 상품들이 중고나라에 많다고 한다.
저렴한 테블릿을 원한다면...

난 팔지 않고 아이패드가 있지만 안드로이드가 궁금해서 그냥 쓰기로 한다.
그리고 안드로이드 개발도 한번 해볼까 생각중이다.

2014년 12월 20일 토요일

EOS 70D 간단리뷰


나는 카메라에 대한 지식이 전무한 상태이며 이 기종에 대한 단순한 느낌과 구매 방법 정도를 간단하게 리뷰 한다.
자세한 리뷰는 인터넷 세상에 널리고 널렸으니 가볍게.. 끄적여 본다.

가격은 오프라인 매장 보다는 온라인이 확실히 저렴 한듯 하다.
패키지 상품 (바디 + 렌즈) 로 사는것 보다 바디 단품이 저렴하다.
바디 + 렌즈 구성으로 구매 할때 18-55mm 렌즈 인경우 오래된 버전에 렌즈를 좀더 비싸게
해서 이윤을 남기는 판매자도 있는 것으로 보인다.

18-55mm IS / 18-55mm IS II / 18-55mm IS STM 이렇게 현재 3가지 렌즈가 존재하며
IS STM이 가장 최신이고 자세히는 모르지만 저소음 모터로 인해 동영상 촬영시 소음이 녹화
되지 않는다고 한다.

바디 + 렌즈 + 패키지 머 이렇게 구성되는 상품들은 대부분 렌즈나 사은품 가격이 포함된것으로 사료 되고해서 나는 바디 단품 구매를 했다. 그리고 패키지 상품이나 사은품이 사실 언제 어떻게 쓰는 건지도 모른다.

그리고 렌즈도 정품 벌크를 구매 했다.
18-55mm IS STM을 기존 700D 패키지에서 분리 해서 파는 것이 정품 벌크라고 한다.
머 포장 상태등에 불만이 좀 잇었지만 새제품이 확실 하고 시리얼 번호로 정품 등록도 했다.

바디도 현재 정품 등록을 하면 이벤트 기간이라서 캐논에서 사은품도 준다.
나는 세가지 사은품중에 7인치 타블렛을 선택 했는데 언제 올지 모르겠다.

18-55mm IS STM 렌즈는 번들 렌즈로 아주 가볍고 저렴하게 생겼는데 이것만 가지고 촬영 해도 아직 불만이 없다.
비교 대상은 아이폰 5S / 겔럭시 S4 / 아주 오래된 캐논 파워샷 S3 IS  이중에 최고의 품질로
찍힌다.

70D의 바디는 사실 오프라인에서 한번도 만저 보지 못하고 온라인으로 주문했다.
나도 마찬가지로 여러 블로거들에 리뷰를 읽고 읽고 또 읽어 고른 모델이다.
대상이 되었던 모델은 1년 반쯤 전에 100D 부터 700D 그리고 기다리고 기다려 점점 눈이 높아지고 해서 중급기 70D 까지 분석에 분석 끝에 지르고 말았다.
다시한번 언급 하지만 나는 DSLR을 모른다. 단지 한번 사면 10년 쓰자는 위주다.
100D가 처음 나오고 홈쇼핑 같은데서 이야기 할때 당시 트리플렌즈 구성 어쩌구 하면 100만원이 훌쩍 넘어가고 렌즈 1개나 2개 이면 100가 까이 되었다.
당시 아무런 지식이 없던 상태에서 생각해보면 번들렌즈에 좀 저렴한 단렌즈 하나나 좀 저렴한 망원 렌즈 구성으로 엄청나게 비싸게 판듯 하다.
요즘 100D 블랙은 50만원 선에 새제품을 구매 할 수 있는 것 같다.
그래서 70D로 결정을 했는데 근처 홈플러스 하이마트 코스트코 까지 그 어디에서도 실물을
만나 보지 못했다.
결국 온라인으로 구매하고 택배를 받고 서야 실제 모습을 만져 보았다.

무게!
묵직하니 좋다. 렌즈까지 결합했을때 딱 사진 찍기좋은 무게 같다.

디자인!
 다 거기서 거기 DSLR 모습 전통적인 검정 DSLR 솔직히 난 모른다.

왜 캐논?
남들 다 캐논 쓰는거 아닌가? 니콘 쓰는사람 페이스북에 한명 처가 친척중에 한명
그외 모든이가 캐논.. 우리 형이 소니를 쓰긴 하는데 그건 DSLT!

그래서 나는 캐논을 선택 했고 70D를 선택 했다.


다른 엑세서리는 구매하지 말아야지 결심!
렌즈는 아주 추후에 난 정말 이제 사진좀 찍는 사람이다 할때 구매 해야지 결심
친구들이 slr클럽 게시판 보지도 말라고 말린다.
음... 그래도 벌써 17-55mm F2.8 IS USM이라는 축복 렌즈도 알고 있다.

지금은 결심 한다. 사진을 제대로 배우고 앞으로 열심히 들고 다니기로
캠핑을 하니 이제부터 캠핑에서 사진도 많이 찍고 블로그에 캠핑 후기도 남기기로 결심해 본다.

파워샷 S3 IS는 세월이 7 ~ 8년 됬으니 이제 우리 아들 학교 다니면서 놀러가면 가지고 가서 찍으라고 해야 겠다.