티스토리 툴바


달력

05

« 2012/05 »

  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  

'iOS/iPhone'에 해당되는 글 42

  1. 2011/08/29 Lion에서 Python PIL 사용하기
  2. 2011/08/26 iOS 캡쳐 자동화 하기 (1)
  3. 2011/08/26 아이폰 시뮬레이터 캡쳐 받기 - iOS-Simulator Cropper
  4. 2011/06/10 UILabel 글씨에 테두리선 그리기. (2)
  5. 2011/05/25 NSString 암호화
  6. 2011/04/26 UIImage를 흑백 이미지로 바꾸기
  7. 2011/04/25 UIView에서 Subview 지우기
  8. 2011/03/22 아이폰에서 통신 사업자 및 국가코드 알아 오기. (3)
  9. 2011/03/07 이전 버전의 xcode 설치 하기..
  10. 2011/03/03 xcode 4.0에서 gh-unit을 이용해서 unittest 하기..
  11. 2011/03/02 xcode 4.0에서 static library 만들어서 사용하기.. (4)
  12. 2011/02/28 xcode 4.0 에서 svn ignore 설정 하기.
  13. 2011/02/11 터치 제스쳐 레퍼런스 가이드..
  14. 2010/12/27 아이폰용 빌드 스크립트
  15. 2010/12/13 iPhone 4용 이미지 라시이징 스크립트 #2 (1)
  16. 2010/11/25 아이폰4용 이미지 svn에 add하기..
  17. 2010/10/20 아이폰/아이폰4/아이패드 아이콘 넣기 (2)
  18. 2010/10/12 아이폰/아이패드 앱에서 사용자 폰트 사용하기. (2)
  19. 2010/09/02 iPhone 4용 이미지 리사이징 스크립트...
  20. 2010/08/25 xcode에서 git의 exclude 설정해 주기
  21. 2010/08/05 아이폰에서 파이챠트 그리기..
  22. 2010/07/22 itunes와 아이폰 어플끼리 파일 공유 하기 (4)
  23. 2010/06/10 맥 어플리케이션에서 정규식을 사용하는 RegexKitLite를 사용하기.
  24. 2010/04/01 아이폰용 스케치 페이퍼.
  25. 2010/03/25 Warning 메시지 꺼 버리기..
  26. 2010/03/25 xcode에서 저장한 파일 undo시 나오는 메시지 없애기.
  27. 2010/03/19 cocoa에서 랜덤 숫자 만들기.. (1)
  28. 2010/03/19 xcode에서 주석에 나오는 회사 이름 바꾸기.
  29. 2010/03/18 iPhone 빌드용 스크립트.
  30. 2010/02/19 UIAlertView에 UITextField 넣기.
2011/08/29 11:21

Lion에서 Python PIL 사용하기 iOS/iPhone2011/08/29 11:21

예전 파이션을 이용한 아이폰4용 이미지 컨버팅 스크립트를 사용하는 PIL라이브러리를 사용 했습니다.
그런데 Lion으로 버전이 올라가면서 PIL 설치가 잘 안 되서..
이래저래 찾아 봐서 해결 했습니다.
그리고 그 내용을 정리 합니다.


먼저 v8c of jpeg 를 받아서 컴파일을 해 줍니다.
혹시 안 받아 질 경우에는 제일 마지막에 업로드 해 놨으니.. 그 파일을 받으세요.

컴파일은 아래와 같이 진행 하시면 됩니다.

sudo make clean
CC="gcc -arch i386" ./configure --enable-shared --enable-static
make
sudo make install

컴파일 완료 후 PIL을 설치해 줍니다.

sudo easy_install pip
sudo ARCHFLAGS="-arch i386 -arch x86_64" pip install PIL

이렇게 해주면 끝입니다.

참고

다운로드

저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하
2011/08/26 12:05

iOS 캡쳐 자동화 하기 iOS/iPhone2011/08/26 12:05

아이폰 시뮬레이터 캡쳐 받기 - iOS-Simulator Cropper 포스팅에서 마지막에 스크립트로 자동화 하기가 있었습니다.
사이트에서는 그냥.. 캡쳐만 대체해 주면 잘 된다고 했는데 -_-;
잘 되질 않더군요.
코드도 손 볼 부분도 좀 있고 해서..
나름대로 수정을 했습니다.


먼저 자동화 된 캡쳐를 받기 위해서는 소스코드에 NSLog를 등록 합니다.

형식은 3가지를 지원 합니다.
그냥.. 일반적인 캡쳐
NSLog(@"screenshot mainmenu.png");
앞 쪽과 뒤쪽은 숫자는 자동으로 증가 합니다.

NSLog(@"screenshot -once mainmenu.png");
-once를 넣어 주시면 딱 한번 만 캡쳐를 받아 줍니다.

NSLog(@"screenshot -delay 4.0 mainmenu.png");
-delay를 넣어 주시고 뒤에 숫자를 넣어 주시면, 숫자 만큼 초가 지난후에 캡쳐를 받아 줍니다.
위에서 받은 캡쳐는 4초 후에 캡쳐가 받아 지겠죠?


첨부파일 다운로드 :

우선 첨부 파일을 다운로드 받아서, 더블클릭해서 압축을 푸시거나,
쉘이 편하신 분은 터미널에서

$ tar -zxvf iOS-Simulator-Screenshot.tgz

이렇게 해서 압축을 푸시면 됩니다.
그리고 해당 경로로 이동 후

./iOSCapture.sh [캡쳐 할 경로]

이렇게 실행하시면 됩니다.


이미지에서는 바탕화면에 캡쳐 하도록 되어 있습니다.

그리고 시뮬레이터를 실행 시켜 주시면, 해당 타이밍에 착착~ 캡쳐를 받아 줄겁니다.
참 쉽죠?

아래는 코드를 적어 봅니다.
iOSCapture.sh
#!/bin/bash
# 아이폰 캡쳐 자동화
#
# 사용법
#
# $ iOSCapture.sh [저장 경로]
#
# 예) iOSCapture.sh ~/Desktop
#
#-------------------
# 어플리케이션 추가
#
# * 캡쳐 하기
#     NSLog(@"screenshot mainmenu.png");
# * 한번만 캡쳐 하기
#     NSLog(@"screenshot -once mainmenu.png");
# * 2초후에 캡쳐 하기
#     NSLog(@"screenshot -delay 2.0 mainmenu.png");
#
# 참고 :
#     http://stackoverflow.com/questions/1360552/automate-screenshots-on-iphone-simulator/1579182#1579182

# 사용법에 대한 함수.
function usage()
{
    echo "`basename $0` [-h] [targetPath]"
    echo "    -h : 도움말"
    echo "    targetPath : 저장 할 경로"
}

while getopts :hr: optname ;do
    case $optname in
        h)
            usage; exit 1;;
    esac
done

tail -f -n0 /var/log/system.log | ./iOSLogGrab.py $1



iOSLogGrab.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import string
import re
import os
import threading

from collections import defaultdict

captureApplication = "./iOS-Simulator\ Cropper.app/Contents/MacOS/iOS-Simulator\ Cropper"
defaultPath = "."

def screenshotRun(filename):
    command_line = captureApplication + " -p 1 -f " + filename
    print command_line
    os.system(command_line)

def screenshot(filename, select_window=False, delay_s=0):
    t = threading.Timer(delay_s, screenshotRun, [defaultPath+"/%s" % filename])
    t.start()

def handle_line(line, count=defaultdict(int)):
    params = parse_line(line)
    if params:
        filebase, fileextension, once, delay_s = params
        if once and count[filebase] == 1:
            print 'Skipping taking %s screenshot, already done once' % filebase
        else:
            count[filebase] += 1
            number = count[filebase]
            count[None] += 1
            global_count = count[None]
            file_count_string = ('-%02d' % number) if not once else ''

            filename = '%02d.%s%s.%s' % (global_count, filebase, file_count_string, fileextension)
            print 'Taking screenshot: %s%s' % (filename, '' if delay_s == 0 else (' in %d seconds' % delay_s))
            screenshot(filename, select_window=False, delay_s=delay_s)

def parse_line(line):
    expression = r'.*screenshot\s*(?P<once>-once)?\s*(-delay\s*(?P<delay_s>\d*(\.?\d*)))?\s*(?P<filebase>\w+)?.?(?P<fileextension>\w+)?'
    m = re.match(expression, line)
    if m:
        params = m.groupdict()
        #print params
        filebase = params['filebase'] or 'screenshot'
        fileextension = params['fileextension'] or 'png'
        once = params['once'] is not None
        delay_s = float(params['delay_s'] or 0)
        print str(delay_s)
        return filebase, fileextension, once, delay_s
    else:
        #print 'Ignore: %s' % line
        return None

def main():
    try:
        while True:
            handle_line(raw_input())
    except (EOFError, KeyboardInterrupt):
        pass

if __name__ == '__main__':
    if len(sys.argv) > 1:
        print "default path : " + sys.argv[1]
        defaultPath = sys.argv[1]
        print defaultPath
    main()


참고 :


저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하


간간히 블로그에 글을 쓰거나 앱을 올릴때 캡쳐를 받아야 하는데.. 이런걸 쉽게 해 주는 어플리케이션이 있어서 포스팅을 해 봅니다.

이 어플을 사용하면 아이폰과 아이패드 시뮬레이터의 사진을 종류별로 받을 수가 있습니다.
거기다, 내용물만 쓰고 테두리는 iPhone 3 모양으로도 출력을 해 줍니다.

홈페이지 바로가기





그리고 터미널 모드도 지원해서 자동화 해서 캡쳐도 가능 합니다.
파이썬을 이용해서, NSLog로 나오는 메시지를 봐서 캡쳐를 받는 형식으로 자동으로 캡쳐 형식입니다.
순간적으로 나오는 화면이나 동작 중간이라서 캡쳐 받기 곤란한 화면이 있을 경우에는 이걸 이용하면 정말 좋겠네요.

방법은 아래는 참고 하시면 됩니다.



글을 쓰고 나서, stackoverflow의 글에 좀 오류가 좀 있고, 약간 수정하게 있어서 새로 포스팅 했습니다.
iOS 캡쳐 자동화 하기 를 참고 하세요
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하
2011/06/10 15:58

UILabel 글씨에 테두리선 그리기. iOS/iPhone2011/06/10 15:58

UILabel의 글씨에 테두리선 그리기 입니다.





UIOutlineLabel.h
#import <Foundation/Foundation.h>


@interface UIOutlineLabel : UILabel {
    UIColor *outlineColor;
    CGFloat outlineDeep;
}

@property (nonatomic, retain)     UIColor *outlineColor;
@property (nonatomic) CGFloat outlineDeep;

@end


UIOutlineLabel.m
#import "UIOutlineLabel.h"

@implementation UIOutlineLabel
@synthesize outlineColor, outlineDeep;

- (id) initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.outlineColor = [UIColor blackColor];
        self.outlineDeep = 3;
    }
    return self;
}

-(void)drawTextInRect:(CGRect)rect {
   
    CGSize shadowOffset = self.shadowOffset;
    UIColor *textColor = self.textColor;
   
    CGContextRef c = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(c, self.outlineDeep);
    CGContextSetLineJoin(c, kCGLineJoinRound);
   
    CGContextSetTextDrawingMode(c, kCGTextStroke);
    self.textColor = self.outlineColor;
    [super drawTextInRect:rect];
   
    CGContextSetTextDrawingMode(c, kCGTextFill);
    self.textColor = textColor;
    self.shadowOffset = CGSizeMake(0, 0);
    [super drawTextInRect:rect];
   
    self.shadowOffset = shadowOffset;
}

@end

사용법
    UIOutlineLabel *test = [[[UIOutlineLabel alloc] initWithFrame:CGRectMake(10, 10, 200, 30)] autorelease];
    test.text = @"Outline Test";
    test.outlineDeep  = 3;
    test.textColor = [UIColor whiteColor];
    test.outlineColor = [UIColor redColor];
    test.textAlignment = UITextAlignmentCenter;
    [self.view addSubview:test];


저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하
2011/05/25 10:56

NSString 암호화 iOS/iPhone2011/05/25 10:56

암호화 할 일이 있어서 제작한 NSString 카테고리를 올려 봅니다.

암호화 하는 방법은
원본 스트링 -> AES256 인코딩 -> base64 인코딩 -> 암호화 된 스트링

역으로 하는건
암호화 된 스트링 -> base64 디코딩 -> AES256 디코딩 -> 원본 스트링

이런 식으로 진행하게 됩니다.
뭐.. 결국은 인터넷에 굴러 다니던 AES256 방법과 base64를 조합한 정도 ^^;;
하지만, 유용해서.. 올려 봅니다.

사용 방법은
클래스들을 프로젝트에 추가하고 NSString+Encrpyt.h를 import합니다.

#import "NSString+Encrypt.h"


그리고 간단하게 아래와 같이 사용 하시면 됩니다.
NSString *str = @"아무도모르게";
NSLog(@"암호화 : %@", [str encryptWithKey:@"key"]);
NSLog(@"복원 : %@", [[str encryptWithKey:@"key"] decryptWithKey:@"key"]);

실행 결과
2011-05-25 10:45:21.394 EncryptSample[38057:207] 암호화 : HVxuorZdmdYtEZUS2PUJia20yCLh6SwLe8+sLBhSMWs=
2011-05-25 10:45:21.396 EncryptSample[38057:207] 복원 : 아무도모르게

소스

샘플 프로그램


참고 사이트


저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하
2011/04/26 14:06

UIImage를 흑백 이미지로 바꾸기 iOS/iPhone2011/04/26 14:06

UIIamge를 흑백으로 바꾸는 방법을 찾다가..
찾은 내용 입니다.
참고 하세요.

-(UIImage*)convertImageBlackAndWhite:(UIImage *)image
{
    CGColorSpaceRef colorSapce = CGColorSpaceCreateDeviceGray();
    CGContextRef context = CGBitmapContextCreate(nil, image.size.width, image.size.height, 8, image.size.width, colorSapce, kCGImageAlphaNone);
    CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
    CGContextSetShouldAntialias(context, NO);
    CGContextDrawImage(context, CGRectMake(0, 0, image.size.width, image.size.height), [image CGImage]);
   
    CGImageRef bwImage = CGBitmapContextCreateImage(context);
    CGContextRelease(context);
    CGColorSpaceRelease(colorSapce);
   
    UIImage *resultImage = [UIImage imageWithCGImage:bwImage];
    CGImageRelease(bwImage);
    return resultImage;
}

저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하
2011/04/25 09:34

UIView에서 Subview 지우기 iOS/iPhone2011/04/25 09:34

아이폰 프로그램을 사용하면서 가장 자주 쓰게 되는 view에서 subview를 지우는 방법을 간단하게 정리해 봅니다.


먼저 샘플로 라벨을 올려 봅니다.
// UILabel 생성하기
UILabel *aLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 15, 40, 20)];
// label에 태그 넣기
aLabel.tag = 1;
// 글자쓰기
aLabel.text = @"Hello World";
// 라벨을 뷰에 올리기
[self.view addSubview:aLabel];

하위에 있는 뷰 모두 지우기 1

// With some valid UIView *view:
for(UIView *subview in [self.view subviews])
{
    [subview removeFromSuperview];
}


하위에 있는 뷰 모두 지우기 2
while ([self.view.subviews count] > 0)
{
    [[[self.view subviews] objectAtIndex:0] removeFromSuperview];
}


지정한 태그의 subview 지우기
[[self.view viewWithTag:1] removeFromSuperview];


지정 태그 이외의 subview 지우기
for (UIView *subview in [self.view subviews])
{
    if (subview.tag != 1) {
        [subview removeFromSuperview];
    }
}


특정 클래스의 subview 지우기
for(UIView *subview in [self.view subviews])
{
    if([subview isKindOfClass:[UILabel class]])
    {
        [subview removeFromSuperview];
    }
}




저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하

이제는 SK에서도 아이폰이 나오니.. 슬슬 필요 하지 않을까 싶어서
적어 봅니다.
아래 코드를 이용하면, 핸드폰의 국제 설정이 아니라, 서비스의 위치로 사용 할 수도 있습니다.

먼저 프로젝트에서 CoreTelephony.framework를 추가해 줍니다.

그리고 아래와 같은 코드를 넣어 주시면 됩니다.

#import <CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>

CTTelephonyNetworkInfo *networkInfo = [[[CTTelephonyNetworkInfo alloc] init] autorelease];
CTCarrier *carrier = [networkInfo subscriberCellularProvider];

// 사업자 이름 알아오기
NSString *carrierName = [carrier carrierName];
if (carrierName != nil)
    NSLog(@"Carrier: %@", carrierName);

// 모바일 국가코드 알아 오기
NSString *mcc = [carrier mobileCountryCode];
if (mcc != nil)
    NSLog(@"Mobile Country Code (MCC): %@", mcc);

실행해 보시면 아래와 같이 나타납니다.

app[2191:707] Carrier: KT
app[2191:707] Mobile Country Code (MCC): 450

그리고, 국가 코드표는 아래를 참고 하세요.

Wikipedia Mobile Country Codes


저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하
2011/03/07 20:51

이전 버전의 xcode 설치 하기.. iOS/iPhone2011/03/07 20:51

흠... xcode 4.0 gm 버전을 쓰다가..  시뮬레이터가 이상하게 동작해서..
3.X 버전으로 내렸더니.. 시뮬레이터가 아예 동작을 안 하게 되네요 -_-;
혹시나 해서, 폴더를 모두 지우고, 다시 xcode를 설치 했는데..
역시나.. 시뮬레이터가 동작을 안 하네요..
결국은 osx를 다시 설치하는 사태까지 벌어졌습니다.

지금은 이런 낭패를 보고 3.x대로 버전을 낮춰서 개발하고 있습니다.

소 잃고 외양간 고치는 격으로 버전 별로 설치하는 방법을 찾아서..
올립니다.

http://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/downloads

애플 개발자 계정으로 로그인 한 후, 위 주소로 가셔서 옆에 보시면, Developer Tools 이라고 있습니다.
여기 보시면, xcode의 이전 버전을 받으 실 수 있습니다.

다운로드 받으신후 설치를 합니다.

설치 과정에서 Installation Type에 보시면, Location이 있습니다. 거기 밑에 Developer를 클릭하시면,


이와 같이 폴더를 선택하는 메뉴가 나옵니다. 여기서 Other를 누르시고 다른 경로를 선택해서 설치 하시면 됩니다.

예를 들면 기본은 /Developer인데.. /Developer-3.1 이런식으로 버전별로 설치 하시면 됩니다.

이걸 진작 알았으면 xcode 4.0 gm버전을 기본 경로에 설치 하지 않았을 텐데.. 흑....

다른 분들은 유용하게 사용하세요.


추가로... 기존 버전을 삭제하는 방법입니다.

sudo <Xcode>/Library/uninstall-devtools --mode=all


또 추가로.. xcode 4.0하고 xcode 3.X는 같은 맥에 깔면, 시뮬레이터나 organizer가 이상하게 동작하는 경우가 생깁니다.
두개가 너무 달라 졌나 봅니다.
위 팀은 같은 버전대에서만 하시는게 좋을 것 같습니다.
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
TAG install, Xcode
Posted by 신규하

xcode 4.0으로 넘어 가면서.. 이래저래 익숙하지 않아서 난감한게 많네요.

코드를 작성하다가.. unittest를 하려고 하다 보니.. 4.0에서는 또 다른 일이네요 -_-;;
적용하다가.. 알게된  gh-unit이라는 라이브러리가 있어서.. 4.0용에서 사용 하는 과정을 정리해 봤습니다.
이게 ui도 잘 되어 있고, 훨씬 좋더라구요 ^^;



시작 하시기 전에 기존 프로젝를 띄우시거나, 빈 프로젝트를 띄어 줍니다.

1. target 추가 하기.

File > New > New Target... 으로 타겟을 추가해 줍니다.
Application > Window-based Application 을 선택해 줍니다.
여기선  tests라는 이름으로 타겟을 작성했습니다.
Unit Tests는 다른걸로 할꺼니까.. 꺼줬습니다.

Tests의 Build Phases에서 Link Binary With Libraries에 보시면, 이렇게 4개가 추가되어 있으면 정상적으로 추가 된겁니다.


2. 프레임워크 추가하기

https://github.com/gabriel/gh-unit/downloads
이 주소로 가셔서 최신의
여기서 사용한건 GHUnitIOS-0.4.27.zip 이 파일 입니다.
(0.4.28도 있는데.. 이건 오류가 나서 실행이 안 됩니다.. ^^;;)

다운로드 받은 파일의 압축을 푸시고, 프로젝트 폴더에 복사해서 넣습니다. (프로젝트를 끌어 오는 과정에 copy로 해서 옮겨 오셔도 상관은 없습니다.)
복사한 폴더를 UnitTest를 할 타겟(여기서는 Tests)에 드레그 해서 추가해 줍니다.

추가 할때  Add to targets에 Tests만 키고.. 원래 있던 프로젝트의 체크 박스는 꺼 줍니다.

혹시 다른 폴더에 있는 프레임워크를 추가하신 분은 "Tests"의 Build Settings에서 'Framework Search Paths'에 해당 폴더를 추가해 주세요.

그리고 "Tests" Build Settings에서 'Other Linker Flags'에
  • -ObjC
  • -all_load
이렇게 2개를 추가해 줍니다.

혹시, 위 설정이 안 보이시는 분들은 중간에 보시면, Basic이라고 되어 있는 거 옆에 All이라는 버튼이 있습니다. 그걸 누르시면 보일 겁니다.

3. info.plist 변경하기.
각 프로젝트 마다.. 프로젝트-Info.plist 파일이 있을 겁니다.
여기서는 Tests-Info.plist인데.. 여기서  Main nib file base nameMainWindow라고 있을 겁니다.
이 필드를 지워 줍니다.

이걸 지워 주지 않고 실행 하면, 흰색 빈 화면만 나오게 됩니다.

4.Unit Test 코드 넣기.

Tests의 밑에 보시면 main.m이라는 파일이 있습니다.
이 파일의 내용을 모두 지우고, 아래와 내용을 붙여 넣기 합니다.
원본은 좀 긴데.. 블로그에 쓰기 길어서 주석을 좀 제외 했습니다.

원본 : https://github.com/gabriel/gh-unit/blob/master/Project-IPhone/GHUnitIOSTestMain.m
#import <UIKit/UIKit.h>
#import <GHUnit/GHUnit.h>

void exceptionHandler(NSException *exception) {
    NSLog(@"%@\n%@", [exception reason], GHUStackTraceFromException(exception));
}

int main(int argc, char *argv[]) {
        NSSetUncaughtExceptionHandler(&exceptionHandler);
   
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
   
    int retVal = 0;

    if (getenv("GHUNIT_CLI")) {
        retVal = [GHTestRunner run];
    } else {
        retVal = UIApplicationMain(argc, argv, nil, @"GHUnitIPhoneAppDelegate");
    }
    [pool release];
    return retVal;
}
main.m이 2개 있어서 찝찝하신 분은 main.m을 지우고, 원본 파일을 사용하셔도 괜찮습니다.
다만 그 다른 이름의 파일이 컴파일될 파일 목록에 있는지만 체크 하세요.
그리고 2번째 줄에서 #import <GHUnitIOS/GHUnit.h> 에서 IOS를 빼 주고 넣어 주시면 됩니다.

그리고 테스트 할 파일을 추가해 줍니다.
파일을 새로 만드시고, h와 m 파일에 아래와 같이 넣어 줍니다.
ExampleTest.h
#import <Foundation/Foundation.h>
#import <GHUnit/GHUnit.h>

@interface ExampleTest : GHTestCase { }
@end

ExampleTest.m
#import "ExampleTest.h"

@implementation ExampleTest

- (BOOL)shouldRunOnMainThread { // By default NO,
// but if you have a UI test or test dependent on running on the main thread return YES
return NO;
}

- (void)setUpClass {
// Run at start of all tests in the class
}

- (void)tearDownClass {
// Run at end of all tests in the class
}

- (void)setUp {
// Run before each test method
}

- (void)tearDown {
// Run after each test method
}

- (void)testFoo {
NSString *a = @"foo";
GHTestLog(@"I can log to the GHUnit test console: %@", a);
// Assert a is not NULL, with no custom error description
GHAssertNotNULL(a, nil);
// Assert equal objects, add custom error description
NSString *b = @"bar";
GHAssertEqualObjects(a, b, @"A custom error message. a should be equal to: %@.", b);
}

- (void)testBar {
// Another test
}


@end


3.Unit Test 실행해 보기
여기까지 잘 마치셨다면, xcode 4.0의 상단에 보시면, run, stop 옆에 선택상자가 있을 겁니다.
여기서 Tests | iPhone 4.2 Simulator 를 선택하고 run 버튼을 누릅니다.
그러면, 아래와 같이 Unit Test가 실행이 됩니다.


run을 눌러서.. 제작한 함수가 정상적으로 잘 동작하는지 확인해 보시면 됩니다.




저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하

x
code 4.0으로 메뉴나 사용 방법이 너무 낮설어서.. 적응하기 힘드네요 ^^;

사용하다가.. 정적 라이브러리를 로딩 할려고 하니..
아이고 -_-;;;;;

방법은 똑같은데.. 메뉴가 너무 옮겨 져서.
정리 해 봅니다.





1. 빈 워크 스페이스 만들기.


예전과 크게 달라진 점 같습니다. 워크 스페이스를 통해서 프로젝트 단위로 작업을 할 수 있습니다.

File > New > New workspace 로 해서 프로젝트 명을 넣고 빈 워크 스페이스를 제작 합니다.



2. 정적 라이브러리 만들기.

File > New > New Project.. 를 선택합니다. 그리고 Framework & Library에서 Cocoa Touch Static Library를 선택합니다.

프로젝트 명을 적당히 넣고, 생성 합니다.

프로젝트에서 File > New > New File.. 을 해서 Objective-C class를 선택해서 파일을 추가 합니다.


파일의 내용은 아래와 같이 적당히 적어 줬습니다.


3. 라이브러리를 사용할 프로젝트 만들기.


File > New > New Project.. 로 해서 프로젝트를 추가해 줍니다.

이번에는 적당히 View-based Application으로 선택 했습니다.

프로젝트가 생성 되면, 라이브러리의 프로젝트를 라이브러리르 사용할 프로젝트의 프레임 워크에 드레그 해서 넣어 줍니다.

그리고 아래와 같은 메시지 창이 나오면 Finish를 눌러 줍니다.

이제 프로젝트를 누르면 옆에 프로젝트 정보가 나옵니다. Build Phases에서 Target Dependencies에서 +를 눌러서, 라이브러리를 추가해 줍니다.
그리고 LinkBinary With Libraries에서 역시 +를 눌러서.. 추가할 라이브러리를 선택해서 추가해 줍니다.

이제 Build Setting에서 바로 밑에 보면 Basic으로 되어 있는데 이걸 All로 바꿔 누르고 검색에서 header search를 누르면,
Header Search Paths라고 나옵니다.
여기다, 라이브러리의 .h파일이 있는 경로를 가르치도록 넣어 줍니다.
여기서 경로를 User Header Search Paths에 추가해 주셔도 상관 없습니다.

4. 라이브러리 테스트.


헤더를 추가해 보고 아래와 같이 실행해 보시면 됩니다.


흠.. 처음 추가 할려고 할 때는 난감 하더니만.. 정리해 놓고 나니.. 별게 없네요 ^^;;;

내용 소스 파일을 첨부 합니다.
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하
2011/02/28 20:03

xcode 4.0 에서 svn ignore 설정 하기. iOS/iPhone2011/02/28 20:03


xcode 3.x부터.. 이전까지는 svn에서 제외해야 하는 폴더가
build 폴더와 [프로젝트명].xcodeproj  *.mode1v3, *.pbxuser 이렇게 였습니다.

그런데 4.0으로 올라 가면서 이게 변경이 되었네요..

YourProjectName.xcodeproj/xcuserdata/*
YourProjectName.xcodeproj/project.xcworkspace/xcuserdata/*

이렇게 추가가 되었습니다.

 설정은 아래와 같이 하시면 됩니다.

$ cd YourProjectName
$ svn propset svn:ignore build
$ cd YourPorjectName.xcodeproj
$ svn propset -R svn:ignore xcuserdata .

-R옵션으로 모두 걸기 싫으신 분은 직접 찾아 들어가서 예외를 추가해 주셔도 괜찮습니다.

추가로 ignore해 놓은 것을 편집을 하고 싶으시면,

svn propedit svn:ignore .


이렇게 하시면, 현재 폴더의 ignore를 수정 하실 수 있습니다.

참고로, 4.0에서 만들어진 프로젝트를 build폴더가 생기지 않습니다.
svn propset svn:ignore build
이 과정을 생략해 주셔도 됩니다.
그 폴더는 /Users/[사용자명]/Library/Developer/Xcode
여기로 가 버리네요.. 이걸 우짜라는 건지 -_-;

추가:
4.0 설정에서 Location > build Location이 있습니다.
여기서 Place buld puroducts in locations specified by targets 로 설정하면,
3,x와 같이 프로젝트 내부에 build 폴더가 생성 됩니다.


저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하
2011/02/11 19:25

터치 제스쳐 레퍼런스 가이드.. iOS/iPhone2011/02/11 19:25

화면에서 설명이나 메뉴얼, 기획서.. 등등 문서 많은 문서를 만들거나 커뮤니케이션을 할 때 표기 하기 힘든데..
정말 알뜰하게 표기하는 가이드가 있네요 ^^;;
저 같이 디자인에 재능이 없는 사람도 간편하게 가져다 쓰면 쓸 수 있으니.. 좋은 자료 같습니다.

원본 링크 :

Touch Gesture Reference Guide

pdf파일은 여기에 올려 봅니다.

사이트에 가시면 visio나 ai용으로도 있습니다.


그리고 추가로 터치 관련 표기 법도 있네요.
Touch Notation


저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하
2010/12/27 13:47

아이폰용 빌드 스크립트 iOS/iPhone2010/12/27 13:47

아이폰용 빌드 스크립트




이전에 포스팅 했었는데..
이번에 코드 수정 하면서 약간 개선을 해서 올립니다.




#!/bin/bash
# iPhone 용 빌드 스크립트
# 압축은 현재 프로젝트 이름으로 바탕화면에 압축 파일을 생성 함.
#
# 도움말 보기
#     pack -h
#
# 타겟 바꾸기
#    pack [targetName]

# 도움말 출력
function usage()
{
echo "`basename $0` [-h] targetName"
echo "-h : help"
echo "targetName : target name"
echo "    default = DIST"
}

# 옵션 검사 하기
while getopts :hr: optname ;do
    case $optname in
        h)
            usage; exit 1;;
    esac
done

# 타겟 검사
targetName=`echo "$1" | tr '\\\\' '/'`
if [ $targetName = ""];then
    targetName="DIST"
fi

echo "Target : $targetName"

projectName=`echo $PWD  | sed -e 's#.*/##'`
xcodebuild -project $projectName.xcodeproj -configuration $targetName clean build
rm -rf ~/Desktop/$projectName.zip
cd build/DIST-iphoneos/
zip -y -r ~/Desktop/$projectName.zip $projectName.app

만약에 타겟의 이름과 폴더명이 같지 않다면, 36행에 projectName을 수정해서 넣어 주시면 됩니다.
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하



iPhone 4용 이미지 리사이징 스크립트...





위 글을 포스팅하고 나서, 쓰다가 불편해서 약간 수정한 버전도 올립니다.

첫번째는 이전 스크립트를 개선한 버전으로 하위 폴더까지 뒤져서 파일이름을 변경해 줍니다.

#!/usr/bin/python
# -*- coding: utf-8 -*-
#####################################################################
# iPhone 4 용 이미지 파일 리사이징
# 실행 전에 이미지 라이브러리 설치 필요
#     http://www.pythonware.com/products/pil/index.htm
# 이미지 라이브러리 설치 방법
#    python setup.py install
#####################################################################
import sys
import string
import os
import Image

def convertFile(dirpath, filename):
    path = dirpath+'/'+filename
    s =  os.path.splitext(path)
    if s[1] == '.png' and  path.find('@2x') < 0 :
        rename = s[0]+'@2x'+s[1]
        if os.path.exists(rename):
            return 0
        print path+'\t=>\t'+rename
        img = Image.open(path)
        img.save(rename, options='optimize')
        #img = img.resize((img.size[0] / 2, img.size[1] / 2), Image.BILINEAR)
        img = img.resize((img.size[0] / 2, img.size[1] / 2), Image.ANTIALIAS)
        os.remove(path)
        img.save(path, options='optimize')
        return 1

convertCount = 0;
totalFileCount = 0;
for dirpath, dirnames, filenames in os.walk("."):
    if dirpath.find('.svn') > 0:
        continue
    for filename in filenames:
        if convertFile(dirpath, filename):
            convertCount = convertCount + 1
        totalFileCount = totalFileCount + 1
print '========================================'
print '   Total File(s) :'+str(totalFileCount)
print ' Convert File(s) :'+str(convertCount)
print '========================================'

25, 26행에 보시면, 이미지 리사이징 중 축소 방법인데.. 마음에 드시는 것으로 쓰시면 됩니다.

아래는 2번째 스크립트 입니다.
이 스크립트는 파일 이름을 원래대로 복원해 줍니다.
잘 쓰게 되진 않지만, 혹시 저장소 아끼거나, 패치 돌려서 할 일이 쓸만 할 것 같아서 제작 했습니다.

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import string
import os
import Image

def convertFile(dirpath, filename):
    path = dirpath+'/'+filename
    s =  os.path.splitext(path)
    if s[1] == '.png' and  path.find('@2x') > 0 :
        rename = path.replace('@2x', '')
        if os.path.exists(rename):
            print "Revert Filename : " + rename
            os.remove(rename)
            os.rename(path, rename)
            return 1
        return 0

convertCount = 0;
totalFileCount = 0;
for dirpath, dirnames, filenames in os.walk("."):
    if dirpath.find('.svn') > 0:
        continue
    for filename in filenames:
        if convertFile(dirpath, filename):
            convertCount = convertCount + 1
        totalFileCount = totalFileCount + 1
print '========================================'
print '   Total File(s) :'+str(totalFileCount)
print ' Convert File(s) :'+str(convertCount)
print '========================================'

사용 방법은 이전과 동일 합니다.
그럼 잘 사용하세요.

참고

Lion에서 Python PIL 사용하기



저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하
2010/11/25 16:14

아이폰4용 이미지 svn에 add하기.. iOS/iPhone2010/11/25 16:14

아이폰4용으로 지원하기 위해서 aaa@x2.png 파일을 만들면 subversion에서 add가 되지 않는 당황스러운 상황이 발생합니다.

$ svn add icon@2x.png
svn: warning: 'icon' not found

-_-;;

이럴때는 뒤에 @을 붙여서 써 주세요.

$ svn add icon@2x.png@
A (bin) icon@2x.png

이렇게 해 주면, add가 되네요.
참나원..

아래 스크립트는 위 과정에서 빼먹고 입력이 되지 않는 @2x파일들을 add하는 스크립트입니다.

#!/bin/bash
svn st | grep ^?.*@2x.*| sed 's/^?\ */svn add "/'| sed 's/$/"@/' |sh

혹시 저 처럼 shell에서 svn을 사용하시는 분들은 사용해 보세요.
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하


아이폰과 아이폰4를 제작 하다 보면, 아이콘의 크기도 다르게 되는데, 각 아이콘 별로 파일 및 크기를 정리 해 봤습니다.

그냥, 아이폰용으로 아이콘을 넣으면 @2x처리한 아이콘은 아이폰4에서 나오지 않아서, 아래와 같이 처리를 해 줘야 합니다.


아래와 같이 파일 이름과 사이즈를 맞춰서 아이콘을 만들어 줍니다.



 파일 이름  아이콘 사이즈 용도
 Icon.png  57x57  일반적인 아이폰 아이콘
 Icon@2x.png  114x114  고해상도 iPhone4 아이콘
 Icon-72.png  72x72  아이패드 아이콘
 Icon-Small.png  29x29  설정용 아이폰 아이콘 
 Icon-Small@2x.png  58x58  설정 및 검색 결과 고해상도 iPhone4 아이콘
 Icon-Small-50.png  50x50  설정 및 검색 결과 아이패드 아이콘

각 아이콘을 프로젝트에 넣어 줍니다.



Info.plist에 Icon file 옆에서 더하기 버튼을 눌러서, 컬럼을 추가 해 줍니다.



추가에 iconf files를 선택하고, 각 용도에 맞는 파일을 추가해서 입력해 줍니다.




끝..

참 간단하죠? 이걸 몰라서 -_-;; 헤맨적 있네요.. 그래서 정리 합니다.

참고 : Technical Q&A QA1686 App Icons on iPad and iPhone




저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하

아이폰/아이패드에서 사용자 폰트를 사용하기 위한 방법입니다.
아래 코드는 iOS 3.2이상 부터 지원을 합니다.
여기 예제에서는 네이버사의 나눔 손글씨를 이용했습니다.




1. 사용자 폰트를 Resources에 넣습니다.


2. Info.plist에 UIAppFonts를 추가 하고 폰트의 파일명을 배열에 추가 합니다. xcode에서는 Font provided by application을 추가해 주시면 됩니다.


3. 코드에서 폰트를 지정 합니다.
    [lb setFont: [UIFont fontWithName:@"Nanum Brush Script" size:lb.font.pointSize]];
    [tf setFont: [UIFont fontWithName:@"Nanum Brush Script" size:tf.font.pointSize]];


4. 실행 화면


추가로 설치된 폰트의 리스트를 보시리면 아래와 같이 하세요~

   NSArray *fontListArray = [UIFont familyNames];
   
    for (NSString *fontName in fontListArray) {
        NSLog(@"%@", fontName);
    }
 



참고 : UIAppFonts – custom fonts with the iPhone/iPad 3.2 SDK
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하

아이폰4용 이미지를 일일히 리사이징하고 파일명 변경하기 귀찮은 관계로 간단하게 제작 했습니다.

스크립트는 파이썬입니다.
맥엔 파이썬이 기본적으로 설치되어 있어서.. 파이썬은 설치 하실 필요 없습니다.
하지만, 이미지처리를 하기 위해서는 추가로 라이브러리를 설치 하셔야 합니다.
라이브러리는 아래 주소로 가셔서 받으시면 됩니다.

제가 받은건 가장 최신인..
입니다.

받으신 파일을 압축을 푸시고,

python setup.py install

이렇게 설치 하시면 됩니다.

그리고 스크립트는 아래와 같습니다.

파일명 : iPhone4ImageResize.py
#!/usr/bin/python
# -*- coding: utf-8 -*-        
#####################################################################
# 실행 전에 이미지 라이브러리 설치 필요
#   http://www.pythonware.com/products/pil/index.htm
# 이미지 라이브러리 설치 방법  
#   python setup.py install    
#####################################################################
import sys
import string
import os
import Image

for filename in os.listdir("."):
    s =  os.path.splitext(filename) 
    if s[1] == '.png' and  filename.find('@2x') < 0 : 
        rename = s[0]+'@2x'+s[1]        
        if os.path.exists(rename):      
            print rename+' file exist'      
            continue
        print filename+' to '+rename    
        os.rename(filename, rename)     
        img = Image.open(rename)        
        img = img.resize((img.size[0] / 2, img.size[1] / 2), Image.BILINEAR)
        img.save(filename)

해당 폴더에 가서
이 파일을 패스가 걸린 폴더에 복사 하시고, (예 : /usr/local/bin)
파일명을 바꾸실 폴더에 가셔서..
python iPhone4ImageResize.py

또는
iPhone4ImageResize.py

이렇게 해 주시면 됩니다.

아.. 위 스크립트에서는 아이폰4용 이미지로 실행해 주세요.
코드에서 보이는 바와 같이 이미지를 아이폰4용 이미지인 @2x를 붙여 주고..
원본 이름인 작은 이미지로 리사이징 하는 스크립트입니다.
그리고 리사이징 된 이미지가 있으면, 그 이미지는 실행하지 않습니다.

잘 사용하세요.


저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하
2010/08/25 18:35

xcode에서 git의 exclude 설정해 주기 iOS/iPhone2010/08/25 18:35

xcode에서 git
를 사용 할 때 exclude될 항목을 간단하게 설정하는 방법이 있어서.. 소개 할까 합니다.


http://github.com/tbarbe/Xcode-Git-User-Script

위 사이트에 가면 git에서 사용할 exclude 스크립트 설정입니다.

pasteMe_into_xcode_script_menu
위 파일일 내용을

xcode의 상단 메뉴 바에서 종이 모양의 아이콘에서 Edit User Script를 선택합니다.


그 다음에 더하기(+) 버튼을 눌러서.. 스크립트 내용을 복사합니다.

그리고 pasteMe_into_xcode_script_menu에 있는 스크립트를 붙여 넣기를 합니다.

그리고 실행하는 방법은..
역시 상단 메뉴에서 종이 모양을 선택 후 아까 입력한 스크립트를 실행 하시고, 저장 폴더 선택이 나오면 프로젝트 폴더를 선택 하시면 됩니다.

저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하
2010/08/05 09:34

아이폰에서 파이챠트 그리기.. iOS/iPhone2010/08/05 09:34

챠트를 그릴일이 있어서.. 챠트 그리기 라이브러리는 찾았습니다.

찾은 라이브러리는 아래 정도가 있습니다.

http://code.google.com/p/core-plot/

http://blog.oofn.net/projects/graphx/

http://developer.snowmintcs.com/frameworks/sm2dgraphview/index.html

http://code.google.com/p/s7graphview/

이 정도를 찾았습니다.
하지만, 문제는 안 이쁘다는거 -_-;;;
이쁜것도 있지만, 이쁜건 유료 더군요.
그래서 더 찾아서.. 그나마 간단하면서, 이쁜걸 찾았습니다.

http://www.tempura.org/rants/2010/07/pie-charts-on-ios/


하지만, 약간의 문제가 있더군요.
챠트 출력 위치가 0, 0 부터 시작하면 잘 나오지만, 위치가 옮겨지면, 챠트가 제대로 나오지 않는 문제가 생겨서,
클래스의 내부를 약간 수정했습니다.
디자인에 흰색 테두리를 진한게 출력 하도록 수정 했습니다.
^^*

그래서 아래는 사용 방법입니다.

    PieChartView *_pieChart;
    CGRect rect = CGRectMake(0.0f, 60.0f, 320, 320);
    _pieChart = [[PieChartView alloc] initWithFrame:rect];
    [self.view addSubview:_pieChart];
   
    [_pieChart clearItems];
   
    [_pieChart setGradientFillStart:0.3 andEnd:1.0];
    [_pieChart setGradientFillColor:PieChartItemColorMake(0.0, 0.0, 0.0, 0.7)];
   
    [_pieChart addItemValue:0.4 withColor:PieChartItemColorMake(1.0, 0.5, 1.0, 1.0)];
    [_pieChart addItemValue:0.3 withColor:PieChartItemColorMake(0.5, 1.0, 0.5, 0.5)];
    [_pieChart addItemValue:0.3 withColor:PieChartItemColorMake(0.5, 0.5, 1.0, 0.5)];
   
    [_pieChart setHidden:NO];
    [_pieChart setNeedsDisplay];

각 차트의 값마다.. 알파를 따로 줄 수 있습니다.
약간의 알파가 흰색 선과 맞물리면, 약간의 보더 효과도 줄 수 있습니다.

찾을때는 힘들게 찾았는데 -_-;; 참 간단해 지네요..

수정 클래스

예제 프로그램

 
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하

itnues 9.1부터 생긴 아이폰 어플과 파일을 공유하는 방법입니다.

프로그램에서 info.plist에서 UIFileSharingEnabled를 추가해 주고 YES값을 넣어 주면 됩니다.


xcode에서 찾으시면 Application Supports iTunes file sharing을 찾으시고 체크 박스를 체크해 주시면 됩니다.

공유가 되는 폴더는 Documents 폴더 입니다. 그리고 이 경로에서 최상위 경로만 제어가 되게 됩니다.
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하



맥이나 아이폰 어플리케이션에서 정규식을 사용하기 위해서 RegexKitLite을 사용합니다.
하지만, 맥 어플에서는 그냥 컴파일이 되지 않는 경우가 있습니다.

이런 경우 아래와 같은 방법으로 해결 하세요.


  1. 프로젝트에 RegexKitLite.hRegexKitLite.m을 추가 합니다.
  2. Target을 열어서 빌드 옵션에서 "Other Linker Flags"에 "-licucore"를 추가해 줍니다.
  3. 컴파일 합니다.


저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하
2010/04/01 02:04

아이폰용 스케치 페이퍼. iOS/iPhone2010/04/01 02:04

http://oelna.de/blog/?p=546

여기에서 아이폰용 스케치 페이퍼를 받았는데..
약간 마음에 들지 않는 부분이 있어서..
제 나름대로 변경을 했습니다.

많이 변경 한건 아니구, 가로용 페이지 만들고, 상단바가 없어서.. 상단바를 추가한 페이지를 추가한 정도 입니다.


제작했던 워드 파일과 pdf를 공유 합니다.
고쳐서 쓰실 분은 워드 파일을 수정해서 사용하세요.



추가로 아이패드용 스케치 페이퍼도 있네요 ^^;
http://oelna.de/blog/?p=552
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하
2010/03/25 11:53

Warning 메시지 꺼 버리기.. iOS/iPhone2010/03/25 11:53

다른 C의 라이브러리를 가져 와서 사용하는데.. 자꾸 라이브러러 쪽에서 경고(Warning)이 발생한다면, 귀찮죠..
뭐.. 고치면 베스트 이지만, 이걸 고쳤다가.. 괜히 다른데 영향이 갈것 같아서 귀찮고,
그렇다고, 경고 메시지를 볼려니 컴파일 할 때 마다.. 신경이 쓰이고...
이럴 경우 대처 하는 방법입니다.

내용은 간단한데 서론이 너무 길군요 -_-;;;;

라이브러리 쪽 프로젝트에서 Get Info를 해서.. Build 에서..

Other Warning Flags
여기에 -w 를 넣어 줍니다.


이렇게 작업해 놓으시면, 메인 프로젝트를 컴파일 할 때 라이브러리 쪽 프로젝트의 경고를 보지 않아도 됩니다.
ㅎㅎ

참고 : http://www.devworld.apple.com/tools/xcode/compilercodewarnings.html
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하


xcode로 코딩 하시는 분들은 많이 본 창일 겁니다.

저장을 하고 나서, 되돌리기(Undo)를 할려고 하면 나오는 메시지 입니다.
파일 저장 했다. 그래도 할꺼냐? 라는 귀찮은 문구..

이걸 없애는 방법입니다.

터미널창을 띄우시고, 아래 내용을 붙여넣기 해서.. 하시면 됩니다.

defaults write com.apple.XCode XCShowUndoPastSaveWarning NO

이러고 나서.. xcode를 새로 실행을 하면, Undo를 물어 보지 않습니다.

그래도, 이게 정겨웠다 싶으신 분들은 마지막에 있는 NO를 YES로 바꿔서 실행해 주시면, 원복이 됩니다.
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하
2010/03/19 22:16

cocoa에서 랜덤 숫자 만들기.. iOS/iPhone2010/03/19 22:16

유용한 랜덤 함수가 보여서 옮겨 봅니다.
다양한 상황에서 랜덤이 필요 할 경우가 있을 사용하면 유용 할 듯 싶습니다.
arc4random함수를 사용하는 예제인데, 랜덤 시드가 따로 필요 하지 않아서 좋네요.
참고 하세요.

- (CGFloat)randomNumberBetween:(CGFloat)min and:(CGFloat)max {
    if (max < min) return max;  // 최대값이 최소값 보다 작으면 최대값 리턴.
    if (min == max) return min; // 최대값과 최소값이 같으면 최소값 리턴

    CGFloat randomFloat = (float)arc4random() / 0x100000000;  // 최대값 정의

    return ((max - min) * randomFloat) + min;
}


사용예

CGFloat randomFloatNumber = [self randomNumberBetween:0.0f and:10.0f];

CGFloat randomIntegerNumber = (int)round([self randomNumberBetween:0.0f and:10.0f]);

참고 : http://iphonedevelopment.blogspot.com/2008/10/random-thoughts-rand-vs-arc4random.html

저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하

xcode에서 새로운 파일을 만들었을 때 나오는 기본 회사 이름을 바꾸는 방법입니다.
~/Library/Preferences/com.apple.Xcode.plist
위 파일을 찾아서.. 열어 줍니다.
그리고 PBXCustomTemplateMacroDefinitions 키를 찾습니다.
만약에 키가 없다면, 새로 만들어 줍니다.
키를 만들었으면 값을 DIctionary로 바꿔주고, 아이템을 추가해 줍니다.


그리고 그 값에.. ORGANIZATIONNAME 을 넣어 주고, 값을 수정 합니다.
마지막으로 종료 하면서 저장을 하시면 됩니다.

다른 방법으로는 터미널에서

defaults write com.apple.Xcode PBXCustomTemplateMacroDefinitions '{"ORGANIZATIONNAME" = "YourCompanyName"; }'


이런 방법으로도 가능 합니다.
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하
2010/03/18 17:20

iPhone 빌드용 스크립트. iOS/iPhone2010/03/18 17:20

아이폰용 앱을 개발을 하게 되면, 빌드 후 압축을 해서 올리는 과정을 하게 됩니다.
빌드 까지는 그러려니.. 하는데.. 압축해서 올리는 과정은 정말 귀찮습니다.
그래서 그 부분에 제가 쓰는 스크립트를 공개 합니다.
저 같은 경우에는 svn도 터미널에서 작업을 하고 있어서 ^^;;
이 방법이 제일 편하게 느껴 지더라구요.

터미널에서 프로젝트 폴더로 이동합니다.
vi pack

이렇게 하시고, 아래 내용을 입력 합니다.

#!/bin/bash
projectName="FlashCard"
xcodebuild -project $projectName.xcodeproj -configuration DIST clean build
rm -rf ~/Desktop/$projectName.zip
cd build/DIST-iphoneos/
zip -y -r ~/Desktop/$projectName.zip $projectName.app

projectName는 자신의 프로젝트 이름으로 바꿔 주세요.

위 내용으로 파일을 만듭니다.
chmod 777 pack

파일을 위와 같이 입력해서, 실행 권한으로 변경합니다.

실행 방법은 아래와 같이 해 주시면 됩니다.
./pack

이렇게 작업을 해 두시면, 빌드에서 압축 파일까지 나오게 됩니다.

저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하
2010/02/19 21:53

UIAlertView에 UITextField 넣기. iOS/iPhone2010/02/19 21:53

UIAlertView에 textfield를 넣을 일이 있어서..
구글링을 해서.. 아래의 주소를 찾았습니다.


열심히 이걸 활용해서.. 프로그램 짜고 올렸는데..
흠...

The following non-public APIs are included in your application:
addTextFieldWithValue:label:
textFieldAtIndex:

If you have defined methods in your source code with the same names as the above mentioned APIs, we suggest altering your method names so that they no longer collide with Apple's private APIs to avoid your application being flagged with future submissions.
이번에는 올려주지만, 다음부터는 쓰지 말라고 하네요.
인터넷에서 별 생각 없이 받아서 사용한 코드가 이런 무서운 화를 부를수 있다는 교훈을 얻었습니다.
솔직히, 일부러 사용한것도 아니구,  어떤게 no-public API인지 매번 확인 할 수도 없으니.
난감하네요..

그래서 찾은 해결책은..

이 주소 입니다.


File.h
UITextField *textField;
UITextField *textField2;
File.m
UIAlertView *prompt = [[UIAlertView alloc] initWithTitle:@"Username and password" message:@"\n\n\n" // 중요!! 칸을 내려주는 역할을 합니다. delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Enter", nil];
textField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 50.0, 260.0, 25.0)]; [textField setBackgroundColor:[UIColor whiteColor]]; [textField setPlaceholder:@"username"]; [prompt addSubview:textField];
textField2 = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 85.0, 260.0, 25.0)]; [textField2 setBackgroundColor:[UIColor whiteColor]]; [textField2 setPlaceholder:@"password"]; [textField2 setSecureTextEntry:YES]; [prompt addSubview:textField2];
// AlertView의 위치를 이동 시켜 줌. [prompt setTransform:CGAffineTransformMakeTranslation(0.0, 110.0)]; [prompt show]; [prompt release];

 // textfield에 커서를 보내고 키보드를 표시 해 줌. [textField becomeFirstResponder];

포럼에서 이 주제로 많은 대화가 오가던데..
문제는 창의 위치와 키보드가 안 나오는 문제, 텍스필드를 넣었지만 크기가 늘어나지 않는 문제 등이 있었습니다.

그나마, 약간의 트릭이 있긴 하지만, 모두 해결된 코드라서 이렇게 옮겨 봅니다.

참고 주소

 

저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 신규하