May 31
alonesiphone iPad, iphone, ualbum, ualbum hd, 사진, 아이패드, 애플, 앨범, 앱, 앱스토어
포토 쇼, 프레임 등 여러가지 아이패드 사진 관련 앱을 프로토 타이핑해보다,
앨범 관리와 프레임을 제공하는 뷰어와 몇 가지 포토 쇼를 제공하는 uAlbum HD를 만들게 되었습니다.
올리고 나니 사용자의 피드백들이 많았고, 그 중 교육용으로의 사용 등은 생각지도 못한 부분입니다. ^^;;
http://iphone.nemustech.com/app/ualbum-hd-for-ipad/
아무튼 1.1에 추가된 “Falling Down1″ 포토쇼가 들어간 데모 동영상을 새로 만들어서 블로깅 해봅니다
App Store: http://bit.ly/ualbum
사용자 피드백과 내부에서 계획하고 있는 기능들등을 꾸준히 반영해서 발전시켜 나가볼 계획입니다.
May 27
alonesiphone appsales, appsales-mobile, ios, iphone, open source
AppSales-Mobile는 앱의 판맥 수익과 리뷰를 보여주는 정말 훌륭한 오픈 소스입니다.
하지만, 리뷰를 받으려고 하면 종종 (리뷰가 많으면 조금씩 %가 올라가긴 하지만 계속 죽는) 죽는 문제가 있습니다.
좀 짜증이 나서 디버깅을 해보니 retain하지 않고 access하는 문제 때문에 죽는거 같아서 아래와 같이 코드를 수정했더니 잘 돌아갑니다.
오픈 소스에 issue로 알려줬습니다. http://bit.ly/appsales_issue
[수정 방법]
1. App.h의 recentVersion property를 retain으로 바꿉니다.
@property (readonly) NSString *recentVersion;
–>
@property (nonatomic, retain) NSString *recentVersion;
2. App.m 의 - (void) updateAverages 에서 recentVersion 을 할당하는 부분을 아래와 같이 바꾸어 줍니다.
…
if (recentVersion == nil || [recentVersion compare:r.version] == NSOrderedAscending ) {
recentVersion = r.version;
…
->
…
if (recentVersion == nil || [recentVersion compare:r.version] == NSOrderedAscending ) {
self.recentVersion = r.version;
…
May 23
alonesiphone data sharing, File System, ios, iPad, iphone, launching, UIDocumentInteractionControlle
아래 그림과 같이 앱에서 이미지 등의 데이트를 다른 앱으로 보내면서 그 앱을 띄우거나, 다른 앱에서 이미지를 받아 앱이 뜨는 것에 관한 포스팅입니다.
(Good Reader나 카카오톡과 같은 앱으로 이미지를 보내서 띄우거나 받아서 앱이 뜨는 것을 말하겠죠?)
애플의 아래 문서를 참고하면 될 것입니다. 이 것을 참고해서 만들어봤습니다.
Opening Files Whose Type Is Unknown
[보내는 쪽]
그림과 같이 Sender에서 UIDocumentInteractionController 을 구현한 앱 목록을 보여주고 앱을 띄우는 방법입니다.

UIDocumentInteractionControllerDelegate을 구현하고 openReceiver 부분을 구현해주면 됩니다.
presentOpenInMenuFromRect:launchButton 는 여러가지가 있습니다.
delegate
@interface SenderAppDelegate : NSObject <UIApplicationDelegate, UIDocumentInteractionControllerDelegate> {
-(void)openReceiver {
NSURL* tempURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"3" ofType:@"jpg"]];
NSLog(@"url: %@", [tempURL absoluteURL]);
self.tempC = [UIDocumentInteractionController interactionControllerWithURL:tempURL];
self.tempC.delegate = self;
[self.tempC presentPreviewAnimated:YES];
[self.tempC presentOpenInMenuFromRect:launchButton.frame inView:self.window animated:YES];
return;
...
[받는 쪽]
JPEG (jpg) 이미지 열기 지원을 위해 받는 쪽은 아래와 같이 합니다.
1. info.plist에 다음 키를 추가
CFBundleDocumentTypes
이름이 Documents Type으로 변경됩니다.
2. CFBundleTypeIconFiles 은 지정하지 않으면 앱의 아이콘이 사용됩니다. 그냥 이렇게 하면 되겠죠.
3. Document Type Name 에 “JPEG” 정도를 입력합니다.
4. LSItemContentTypes 을 추가
item0에 public.jpeg 을 추가합니다.
제가 위와 같이 추가한 것은 아래 그림과 같고

아래와 같이 여러 파일 포맷을 지원할 수 있습니다.
PNG와 JPEG 정도 지원하면 되겠죠?

5. 앱이 위와 같이 이미지를 전달 받아서 launching되면 application:handleOpenURL: 이나 application:openURL:sourceApplication:annotation: 이 불리는데,
application:handleOpenURL:은 4.1 이하에서 지원되지만 곧 deprecated 될 예정이라고 합니다.
application:openURL:sourceApplication:annotation: 은 4.2 이상에서 지원되는데요,
어차피 call-back이라 둘 다 넣어 두면 되게습니다.
전달 받는 URL이 sender가 보내준 URL이고 이 것으로 NSData를 만든 후 UIImage를 만들면 됩니다.
아래와 같이~
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
NSLog(@"url: %@", [url absoluteURL]);
NSData* imageData = [NSData dataWithContentsOfURL:url];
UIImage* image = [UIImage imageWithData:imageData];
imageView.image = image;
return YES;
}
Xcode 3.X 의 경우는 추가가 잘 안되는 경우가 있는 것 같은데요.
이 경우는 아래 코드를 직접 plist를 열어서 추가해도 됩니다.
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array>
<string></string>
</array>
<key>CFBundleTypeName</key>
<string>JPG</string>
<key>LSHandlerRank</key>
<string>Default</string>
<key>LSItemContentTypes</key>
<array>
<string>public.jpeg</string>
</array>
</dict>
</array>
May 23
alonesiphone animation, apple, caanimation, cabaseanimation, cakeyframeanimation, calayer, dev, ios, iPad, iphone, uiview
간단하게는 UIView의 beginAnimations:context: 으로 animation block을 설정하고 commit해서 animation을 처리했었는데요..
(현재는 심사 중인) uAlbum 의 falling down과 같은 animation을 처리하기에는 부족한 부분이 많습니다.
그래서 Core Animation의 CABaseAnimation, CAKeyAnimation을 사용했는데요.. 관련 자료들을 열거해봅니다.
1. Apple의 Core Animation Guide (좀 길어도 이게 정석이긴 하죠.. 그러나)
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreAnimation_guide/Introduction/Introduction.html
2. 아주 괜찮은 Core Animation Tutorial (With Sample Code)
Animating Interfaces with Core Animation: Part4 ~
http://nachbaur.com/blog/core-animation-part-4

3. KeyPath에 관해
CABaseAnimation이나 CAKeyFrameAnimation 등의 만들 때, key path의 값이 어떤게 있는지 궁금하게 되는데요, 이에 관해서는 아래를 참고하시면 좋을 것입니다.
May 06
alonesiphone analytics, App, ios, iphone, sales, 아이폰, 애플, 앱 분석
여러 광고 플랫폼들을 이용하면 어느 정도 앱 다운로드나 사용 빈드를 분석을 할 수 있습니다만.. 좀 부족한 부분이 많죠?
블로그나 사이트의 통계를 분석해주는 종결자 Google Analytics를 아이폰 앱 분석에 사용하면 아래와 같은분석 데이터를 아이폰 앱에서도 얻을 수 있습니다~
(물론, 예전부터 이 방법이 소개되었었죠. 저도 몇 번 말했지만… 아무튼 테스트를 한 번 해보고 포스팅해봅니다~)
방문자 수가 앱 사용자 수가 되겠죠?
여기에 국가별 통계, 사용 시간 등등 아주 유용한 정보를 얻을 수 있을 것입니다.
( -_-; 아래 정보는 이 블로그의 정보이고요)
방법은
1. 웹 페이지를 하나 만듭니다.
Google Analytics가 폴더 단위로 분석하기 때문에, 도메인을 하나 만들긴 좀 그렇고, 폴더를 하나 만들면 되겠죠?
그 폴더에 index.html을 하나 만듭니다.
2. Google Analytics에 분석할 사이트 (위에서 만든 폴더까지의 경로로)를 등록하면 추적 스크립트 코드를 줍니다.
3. 이 추적 코드를 ’1′ 에서 만든 index.html에 넣어 줍니다.
4. 아이폰 앱에서 webview를 하나 (window 위에다 살짝 올려서 숨겨두면 되겠죠? ) 띄워 줍니다.
앱이 처음 시작하거나, 포 그라운드로 오거나 할 때 webview로 ’1′에서 만든 페이지를 열어 주면 되겠죠?
좀 더 세심한 분석을 원하면 원하는 view로 진입할 때 마다 불러줘도 되겠죠?
테스트 앱을 만들어서 해보니 잘 되더군요 ^^