태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
Creative Commons License
Creative Commons License
기껏 열심히 app을 만들어 팔려고 appstore에 올렸는 데, 해킹당해서 수익은 없고 널리 퍼지는 꼴을 보면... 참 씁쓸하죠.

물론, 값어치없는 app들도 꽤 많긴 하지만, 어쨌든 만드는 사람의 수고를 무위로 만드는 건 옳지 못한 일이겠죠.

몇가지 해킹방지에 대해 좀 고민을 하고 있는 중인데,

구글링을 하다 이런 방법이 있길래 소개합니다.  [원문 :  http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html]

방법은 간단합니다. app의 Info.plist파일의 변조여부를 판단하는 건데,

1.  app과 Info.plist의 timestamp를 비교해봅니다. 아마 대부분은 같겠죠. 해킹당하지 않았다면.

2. Info.plist의 사이즈를 체크합니다. app에서 Info.plist의 크기를 이미 알고있다면 간단하게 비교할 수 있겠죠.

3. Info.plist의 형태가 binary인지를 확인합니다. Distribution시 Info.plist는 binary로 변환되는데 해킹당하면 다시 XML로 바뀌게 되죠.

4. key-pair에 SignerIdentity, 또는 Apple iPhone OS Application Signing 필드가 있는 지 확인합니다. 원래는 없어야 정상입니다.
    이 키쌍은 application loader에게 이 app은 decrypt되어있고 믿을 수 있다고 속이는 역할을 하게 됩니다.

이러한 방법도 뚫렸다는 이야기도 있지만, 아직 대부분은 이러한 방식으로 막을 수도 있답니다.

좀 더 연구가 필요할 것 같습니다.
신고
블로그 이미지

*별빛*

UI/UX관련 개발이슈 및 방법을 나누는 곳입니다. Flex/AIR, Silverlight등 pc 기반 iPhone, Android등 smartphone 기반

Creative Commons License
Creative Commons License
enum {
  MPTaskOptionNone = 0,
  MPTaskOptionTerminateOnAppExit = 0<<1,
  MPTaskOptionTerminateOnThreadDeath = 1<<1,
  MPTaskOptionTerminateOnSemaphore = 1<<2,
  MPTaskOptionKeepRunning = 1<<3,
  MPTaskOptionLurad = 1<<4,
  MPTaskOptionGetauscht = 1<<5
};
typedef UInt32 MPTaskOption;

UInt32 numProcessors = MPProcessorsScheduled();
UInt32 taskOptions = (MPTaskOptionKeepRunning | MPTaskOptionLurad);

// 백그라운드 프로세스 생성
for (int n=0;n<numProcessors; n++)
  MPCreateTask(MyTask, kMPStackSize, NULL, NULL, taskOptions, taskID);

* 프로세스 생성하기전에 체크해야 된다.
if ([[UIDevice currentDevice] isProcessFoolEnabled]) {
}
신고
블로그 이미지

*별빛*

UI/UX관련 개발이슈 및 방법을 나누는 곳입니다. Flex/AIR, Silverlight등 pc 기반 iPhone, Android등 smartphone 기반

Creative Commons License
Creative Commons License
일반적으로, Debugging을 할 때 사용하는 NSLog는 단순하게 문자열을 나열하는 식으로 되어 불편하다.
따라서, 개발자마다 NSLog를 변형해서 쓰곤 하는데, 다음과 같이 변형해서 써보면 꽤 편리하다.

/////////////////////////////////////////////////
#ifdef DEBUG
  #define Dmsg(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNTION__ , __LINE__ , ##__VA_ARGS__)
#else
  #define Dmsg(...)
#endif

#define Amsg(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNTION__ , __LINE__ , ##__VA_ARGS__)
// Dmsg는 Debug모드일때만, Amsg는 항상 표시됨.
/////////////////////////////////////////////////

[사용예]

Dmsg();
Dmsg(@"여기까지");
Dmsg(@"value: %d",x);
Dmsg(@"string: %@",str);
Dmsg(str) ---> 동작 안됨. 에러.
신고
블로그 이미지

*별빛*

UI/UX관련 개발이슈 및 방법을 나누는 곳입니다. Flex/AIR, Silverlight등 pc 기반 iPhone, Android등 smartphone 기반

Tag iphone, NSLog
Creative Commons License
Creative Commons License

App을 만들다 보면, 초기 화면에 사용자 약관 동의를 입력받아야 하는 경우가 있다.

다음과 같이 작성한다면 쉽게 구현할 수 있다.

-- AppDelegate.m --

-(void)applicationDidFinishLaunching:(UIApplication*)application {
// Create window
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
[window setBackgroundColor:[UIColor whiteColor]];

// Set up main view navigation controller
MainMenuViewController *navController = [[MainMenuViewController alloc] init];

// Create a navigation controller using the new controller
navigationController = [[UINavigationController alloc] initWithRootViewController:navController];
navigationController.navigationBarStyle = UIBarStyleDefault;

[navController release];

// Create Terms of Service screen
if (![self checkIfAccepted]) {    // Accept가 안된 상태라면
tosController = [[TermsOfServiceViewController alloc] init];
[window addSubview:[tosController view]];
navigationController.view.hidden = YES;
}

// Add the navigation controller's view to the window
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
}

-(void)termsOfServiceAccepted
{
  tosController.view.hidden = YES;
  navigationController.view.hidden = NO;
}

-(BOOL)checkIfAccepted {
  NSUserDefaults* ud = [NSUserDefaults standardUserDefaults];
  if (![ud boolForKey:@"accepted"]) {
    return NO;
  } else
    return YES;
}

신고
블로그 이미지

*별빛*

UI/UX관련 개발이슈 및 방법을 나누는 곳입니다. Flex/AIR, Silverlight등 pc 기반 iPhone, Android등 smartphone 기반

Creative Commons License
Creative Commons License

app configuration등 크지않은 데이터의 입출력을 위해서 굳이 database를 사용하지 않고 plist란 것을 사용할 수 있다.

preference와 비슷하다면 비슷하다고도 할 수 있지만, plist는 app에서만 access가 가능하다.

-(id)readPlist:(NSString *)fileName {
  NSData *plistData;
  NSString *error;
  NSPropertyListFormat format;
  id plist;

  NSString *localizedPath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"plist"];
  plistData = [NSData dataWithContentsOfFile:localizedPath];

  plist = [NSPropertyListSerialization propertyListFromData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error];
  if (!plist) {   
      NSLog(@"Error reading plist from file '%s', error = '%s'", [localizedPath UTF8String], [error UTF8String]);   
      [error release];   
   }     
   return plist;   
}  

- (NSArray *)getArray:(NSString *)fileName {
   return (NSArray *)[self readPlist:fileName];
}

- (NSDictionary *)getDictionary:(NSString *)fileName {
   return (NSDictionary *)[self readPlist:fileName];
}

- (void)writePlist:(id)plist fileName:(NSString *)fileName {
   NSData *xmlData;
   NSString *error;

   NSString *localizedPath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"plist"];
   xmlData = [NSPropertyListSerialization dataFromPropertyList:plist format:NSPropertyListXMLFormat_v1_0 errorDescription:&error];
   if (xmlData) {
      [xmlData writeToFile:localizedPath atomically:YES];
   } else {
      NSLog(@"Error writing plist to file '%s', error = '%s'", [localizedPath UTF8String], [error UTF8String]);
      [error release];
   }
}

신고
블로그 이미지

*별빛*

UI/UX관련 개발이슈 및 방법을 나누는 곳입니다. Flex/AIR, Silverlight등 pc 기반 iPhone, Android등 smartphone 기반

Tag iphone, plist
Creative Commons License
Creative Commons License

정식으로 mp3파일이나 스트림을 플레이하기위해서는 coreaudio등을 사용하는 방법이 있으나,

UIWebView를 사용하여 간단하게 구현할 수도 있다.

UIWebView *playerView;

-(void)initMP3Player {
  playerView = [[[UIWebView alloc] initWithFrame:CGRectMake(0,0,0,0)] retain];
  playerView.delegate = self;
}

-(void)playMP3:(NSString*)mp3url {
  NSURLRequest *req = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:mp3url] ];
 [playerView loadRequest:req];
[req release];
}

신고
블로그 이미지

*별빛*

UI/UX관련 개발이슈 및 방법을 나누는 곳입니다. Flex/AIR, Silverlight등 pc 기반 iPhone, Android등 smartphone 기반

Tag iphone, mp3
Creative Commons License
Creative Commons License

보통 iphone에서 video플레이를 하기위해서는 MPMoviePlayerController class를 사용한다.

사용법은 매우 간단하여, 단지 MPMoviePlayerController instance를 만들고 URL을 지정하면 풀스크린으로 영상이 재생된다.

그러나, URL이 Youtube영상일 경우 Apple URL Scheme에서 자동으로 youtube app을 실행시키도록 되어있다.

따라서, 플레이가 끝난 후 원래 app으로 돌아올 수 없는 구조가 된다.

이를 피하고, app안에서 youtube 영상을 플레이하기 위해서 UIWebView를 사용하는 방법이 있다.

다음 예제 코드와 같이 WebView를 사용해보도록 하자.

.....
UIWebView* videoView;
- (void)embedYouTube:(NSString*)url frame:(CGRect)frame {
 NSString* embedHTML = @"\
    <html><head>\
 <style type=\"text/css\">\
 body {\
 background-color: transparent;\
 color: white;\
 }\
 </style>\
 </head><body style=\"margin:0\">\
    <embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" \
 width=\"%0.0f\" height=\"%0.0f\"></embed>\
    </body></html>";
 NSString* html = [NSString stringWithFormat:embedHTML, url, frame.size.width, frame.size.height];
 if(videoView == nil) {
 	videoView = [[UIWebView alloc] initWithFrame:frame];
 	[self.view addSubview:videoView];
 }
 [videoView loadHTMLString:html baseURL:nil];
}
신고
블로그 이미지

*별빛*

UI/UX관련 개발이슈 및 방법을 나누는 곳입니다. Flex/AIR, Silverlight등 pc 기반 iPhone, Android등 smartphone 기반

Creative Commons License
Creative Commons License
어플 실행시 상단의 Status bar의 형태를 바꾸기 위해서는 다음과 같이 한다.

-(void)applicationDidFinishLaunching:(UIApplication*)application {
....
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque];
}
신고
블로그 이미지

*별빛*

UI/UX관련 개발이슈 및 방법을 나누는 곳입니다. Flex/AIR, Silverlight등 pc 기반 iPhone, Android등 smartphone 기반

Creative Commons License
Creative Commons License

iPhone에서 웹서비스와 연동하기 가장 편리한 방법은 아마도 JSON을 사용하는 것이 아닐까 생각된다.
다만, iphone SDK에서 기본적으로 제공되는 것이 아니라 인터넷을 찾아본 결과,
JSON framework이라는 opensource framework이 있었다.
소스코드 및 문서는 프로젝트 홈페이지(http://code.google.com/p/json-framework/ )에서 받을 수 있다.

다운로드를 하면 .dmg파일이 하나 있는데, 일단 더블클릭을 해서 마운트 시키자.
그러면, 몇가지 파일들이 나오는 데, 이중에서 SDKs라는 디렉토리를 복사한 후,
~/Library/로 옮기자. ~/Library라는 말은 (사용자)/Library라는 뜻이다. (이게 무슨말인지도 모르겠다면 따로 리플을 하도록 해라)

그러면, (사용자)/Library/SDKs/JSON 폴더가 있을 것이다.

이제, XCode project를 하나 만든 후, 또는 JSON을 적용할 프로젝트를 열어 놓고,

XCode 메뉴중 Project->Edit Project Settings를 열어보면 다음과 같은 화면이 나온다.


제일 위쪽에 있는 "Additional SDKs"를 클릭하면 다음과 같이 나온다.


여기에서 +를 누른 후 다음과 같은 입력한다.
$HOME/Library/SDKs/JSON/$(PLATFORM_NAME).sdk

그리고, 한참 밑으로 내려와서 Linking에서 Other Linker Flags를 누른 후 아래와 같이 입력한다.
-ObjC -ljson

이제, json-framework을 사용할 준비가 다 되었다.

아마도, iphoneSDK 3.0 beta이후에는 다음과 같은 에러가 나오기도 할 것이다.

.....object file format invalid or unsuitable

이 때는, XCode 메뉴중 Project->Edit Project Settings를 열고 Code Signing Resource Rules Path항목에

$(SDKROOT)/ResourceRules.plist 라고 입력해주면 해결된다.

실제 사용 예는 다시 정리해서 올리도록 하겠다.
신고
블로그 이미지

*별빛*

UI/UX관련 개발이슈 및 방법을 나누는 곳입니다. Flex/AIR, Silverlight등 pc 기반 iPhone, Android등 smartphone 기반

WWDC 2009

iPhone/ iPodtouch 2009.06.09 03:01
Creative Commons License
Creative Commons License


"여러분 안녕하세요? WWDC2009에 오신것을 환영합니다. 휴대폰을 꺼주세요."





"감사합니다. WWDC에 오신 것을 환영합니다. 우리는 여러분 모두를 위해 놀라운 한 주를 보냈습니다.
 이 룸에 가득한 사랑이 느껴지나요? 여지껏 우리가 해왔던 컨퍼런스중 가장 흥분되는 컨퍼런스입니다.
 그 이유를 보여드리도록 하죠."


"이것이 지난 10년간 OS X 사용자들의 증가추이에 대한 차트입니다. 약 500만에서 2500만정도로 증가해왔죠.
 그런데, 뭔 일이 생겼네요. 갑자기 7500만으로 증가했습니다. 아이폰이 나온 이후로, 사용자가 약 3배로 증가했죠. (박수)
 의심의 여지가 없이 이러한 시장의 성장을 계속하기 위해 우리가 하고있는 것을 말씀드리도록 하겠습니다"


스캇 포스털이 천천히 나타나면서, "이제 Mac에 대한 세션을 시작하도록 하겠습니다. 아마 애플에서 여지껏 만든것중
최고입니다. 신규 고객은 새 노트북을 선택할 것이며, 우린 이러한 새로운 디자인을 적용했습니다."


필은 유니바디 기술이 얼마나 기가막힌 기술인지 상기시키면서, "고객은 최고의 만족을 갖고 있으며, 따라서,
우리는 그 기술을 발전시켰습니다. ....  여러분께 새모델을 소개시켜드리겠습니다. 15" MACBOOK PRO!!!"


"Apple은 17인치와 같은 Non-removable 배터리를 채용했습니다. 리튬폴리머 전지이며, 최대 7시간사용가능합니다.
 또한, 5년정도 사용할 수 있을 것으로 예상됩니다."




"3배의 배터리-제대로 처리하지도 못할-를 제공하는 타사와는 다릅니다."
"또한, 열어보면, 굉장히 얇고, 화려한 디스플레이를 볼 수 있습니다. 만약 확대해 본다면, 좀 더 다른 것을 볼 수
 있습니다. 즉, Express card 대신, SD슬롯이 제공됩니다.""많은 사진작업을 할 때 매우 유용할 것입니다."


"더 많은 좋은 점이 있는 데, 3.06GHz-Core2Duo CPU를 지원하며, 8GB까지의 램이 지원되고, 500GB의 하드디스크,
 또는, 256GB의 SSD가 지원됩니다."


"가격은 $1699부터 시작합니다."





- 계속.. 졸려서

신고
블로그 이미지

*별빛*

UI/UX관련 개발이슈 및 방법을 나누는 곳입니다. Flex/AIR, Silverlight등 pc 기반 iPhone, Android등 smartphone 기반

티스토리 툴바