그리고 터미널 모드도 지원해서 자동화 해서 캡쳐도 가능 합니다.
파이썬을 이용해서, NSLog로 나오는 메시지를 봐서 캡쳐를 받는 형식으로 자동으로 캡쳐 형식입니다.
순간적으로 나오는 화면이나 동작 중간이라서 캡쳐 받기 곤란한 화면이 있을 경우에는 이걸 이용하면 정말 좋겠네요.
흠... xcode 4.0 gm 버전을 쓰다가.. 시뮬레이터가 이상하게 동작해서..
3.X 버전으로 내렸더니.. 시뮬레이터가 아예 동작을 안 하게 되네요 -_-;
혹시나 해서, 폴더를 모두 지우고, 다시 xcode를 설치 했는데..
역시나.. 시뮬레이터가 동작을 안 하네요..
결국은 osx를 다시 설치하는 사태까지 벌어졌습니다.
main.m이 2개 있어서 찝찝하신 분은 main.m을 지우고, 원본 파일을 사용하셔도 괜찮습니다.
다만 그 다른 이름의 파일이 컴파일될 파일 목록에 있는지만 체크 하세요.
그리고 2번째 줄에서 #import <GHUnitIOS/GHUnit.h> 에서 IOS를 빼 주고 넣어 주시면 됩니다.
그리고 테스트 할 파일을 추가해 줍니다.
파일을 새로 만드시고, h와 m 파일에 아래와 같이 넣어 줍니다. ExampleTest.h
- (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가 실행이 됩니다.
예전과 크게 달라진 점 같습니다. 워크 스페이스를 통해서 프로젝트 단위로 작업을 할 수 있습니다.
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. 라이브러리 테스트.
헤더를 추가해 보고 아래와 같이 실행해 보시면 됩니다.
흠.. 처음 추가 할려고 할 때는 난감 하더니만.. 정리해 놓고 나니.. 별게 없네요 ^^;;;
$ 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 폴더가 생성 됩니다.
#!/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
#!/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를 붙여 주고..
원본 이름인 작은 이미지로 리사이징 하는 스크립트입니다.
그리고 리사이징 된 이미지가 있으면, 그 이미지는 실행하지 않습니다.
다른 C의 라이브러리를 가져 와서 사용하는데.. 자꾸 라이브러러 쪽에서 경고(Warning)이 발생한다면, 귀찮죠..
뭐.. 고치면 베스트 이지만, 이걸 고쳤다가.. 괜히 다른데 영향이 갈것 같아서 귀찮고,
그렇다고, 경고 메시지를 볼려니 컴파일 할 때 마다.. 신경이 쓰이고...
이럴 경우 대처 하는 방법입니다.
내용은 간단한데 서론이 너무 길군요 -_-;;;;
라이브러리 쪽 프로젝트에서 Get Info를 해서.. Build 에서..
Other Warning Flags 여기에 -w 를 넣어 줍니다.
이렇게 작업해 놓으시면, 메인 프로젝트를 컴파일 할 때 라이브러리 쪽 프로젝트의 경고를 보지 않아도 됩니다.
ㅎㅎ
아이폰용 앱을 개발을 하게 되면, 빌드 후 압축을 해서 올리는 과정을 하게 됩니다.
빌드 까지는 그러려니.. 하는데.. 압축해서 올리는 과정은 정말 귀찮습니다.
그래서 그 부분에 제가 쓰는 스크립트를 공개 합니다.
저 같은 경우에는 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
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인지 매번 확인 할 수도 없으니.
난감하네요..