iOS2012. 10. 4. 14:42

항상 배포 문제로 귀찮아 했었는데..이런 방법이 있는지 이제 알았다..

이글을 쓰신분의 글 등록 날짜를 보니 2월인디...난 6개월이 지난 지금에야 알겠되어버렸으니..흠..암튼 아래 글은 람버트박이라는 분의 블로그에서 옮겨온 것이다.

출처 : http://lambert.tistory.com/407

기존에는 애드혹(AdHoc)으로 앱을 배포하기 위해서는 빌드한 바이너리를 메일 또는 다른 방법으로 클라이언트 또는 최종 테스터에게 전달하여 iTunes를 이용하여 아이폰과 동기화하는 방법을 사용했었다. 그런데 아무리 방법을 알려 줘도 앱 설치가 잘 안된다거나 혹은, 나는 못하겠다(안된다), 등의 이유로 로컬에서 직접 설치하는 방법을 주로 이용했었다. 그게 생각보다 꽤 귀찮다. 


Xcode를 이용하여 소스에서 바로 빌드하는 경우에는 그나마 용이하지만 이런저런 이유로 애드혹 바이너리를 대신 동기화 해준다는 것이 한 두 대일 경우에는 몰라도 10여대가 넘어가면 여간 성가신 일이 아닐 수 없다.

나만 이제야 알게 되었는지는 모르겠으나 OTA(Over the Air)를 이용하여 애드혹 앱을 배포하는 방법을 설명한다. 이는 안드로이드의 경우와 같이 빌드한 바이너리를 웹 서버를 이용하여 배로하는 방식이다. 물론 아이폰의 Identifier를 알고 있고 또한 iOS Provisioning Potal의 Devices에 등록하였다는 전제 하에서이다.

1. Provisioning Profile  생성
다음 그림과 같이 iOS Provisioning Potal에서 Provision Profile을 만든다. 예에서는 프로파일의 이름을 AdHocOTAProfile로 했고, 미리 AdHocOTA라는 APP ID를 만들어 두었다.


2. Provisioning Profile 설치
생성된 프로파일을 다운로드하여 설치(더블클릭하거나, Xcode의 아이콘으로 끌어다 넣거나 그외 다른 방법 이용!)한다.  설치된 프로파일은 다음 그림처럼 ~/Library/MobileDevice/Provisioning Profiles 경로에 위치해 있을 것이다. 


3. Xcode에서 Target 설정
다음은 Xcode에서 배포하려는 앱 프로젝트에서 Target을 더블 클릭하여 Code Singing 정보를 설정한다. (프로젝트 서정 정보가 아니라  Target 이다.)  위에서 생성한 AdHocOTAProfile을 선택한다.



4. Xcode에서 Buil and Archive
이제 Xcode의 메뉴에서 Build > Build and Archive를 선택하여 빌드한다.  빌드하기 전에 Simulator가 아닌 Device가 선택되었는지, 그리고 Bundle Identifier를 제대로 설정했는지 꼭 확인하자.



5. Organizer 설정
아무런 오류 없이 빌드가 완료되면 다음 그림과 같이 좌측 하단의 Archived Applications 항목이 선택된 상태에서 Organizer 화면이 나타날 것이다. 여기에서 Name 항목에 앱의 이름을 입력하고 우측 상단의 Share... 버튼을 클릭한다. 예에서는 AdHocOTA로 입력하였다.


이제 Share Archived Application 창이 나타난다. Identity 항목에서 이전에 만들어둔 Provisioning Profile을 선택하고 Distribute for Enterprise...를 클릭한다.


그러면 다음과 같이 창을 볼 수 있는데, URL과 Title 항목을 입력하고 OK 버튼을 클릭한다. 예에서는 URL: http://localhto:8080/adhoc/AdHocOTA.ipa, Titl:AdHocOTA로 하였다. 서비스를 위한 웹서버의 URL이고 AdHocOTA.ipa는 배포하려는 애드혹 앱의 이름이다. 확장자가 ipa임에 주의하라.
이후 저장할 파일이름은 당연히 AdHocOTA.ipa로 하면된다. 저장를 확인해 보면, AdHOcOTA.ipa와 AdHocOTA.plis 두 개의 파일이 생성되어 있을 것이다. 

* 나머지 항목에 대해서는 나중에 Enterprise 배포에 관한 포스트에서 다룰 예정이다.

6. HTML  생성
이제 웹 서비스를 위한 HTML을 만들차례이다. 다음은 간단한 예이나 각자 상황에 맞춰 만들면 된다. 예에서 파일명을 extension.html로 하였다. 그리고 웹서버에 해당 위치에 AdHOcOTA.ipa와 AdHocOTA.plis 그리고 방금 만든 extension.html 세 개의 파일을 올리자.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"

<html>

<head>

<meta content='text/html;charset=UTF-8' http-equiv='Content-Type' />

<title>OTA Test App</title> 

</head> 

<body>

<ul>

<li><a href="itms-services://?action=download-manifest&url=http://192.168.0.46:8080/adhoc/AdHocOTA.plist">클릭하시면 AdHocOTA 앱을 설치하실  있습니다.</a>

</li> 

</ul> 

</body> 

</html>



7. 앱 설치
아이폰에서 사파리 웹브라우저를 실행하여 위에서 등록한 경로로 접속해보면 다음과 같을 것이다. 이제 링크를 클릭하면 앱이 설치되는 것을 확인할 수 있을 것이다.

Posted by 다오나무
Mac2012. 10. 4. 13:54

OS X의 웹 공유 기능은 OS X의 다른 기능들에 비해 비교적 까다로운 설정이 요구되기 때문에 OS X을 막 접하신 분들보다 고급 유저들이 주로 활용하는 기능으로 여겨져 왔습니다. 그러다 최근 들어 웹 공유 기능을 이용한 아이폰/아이패드 어플(예: 코믹글라스 등)이 많이 개발되었고, 이외 웹 공유 기능을 활용하는 다양한 방법들이 소개되어 이전에 비해 웹 공유 기능의 진입 장벽이 많이 낮아지고 있는 것 같습니다.

OS X 마운틴 라이언에도 기존 OS X 시리즈에 늘상 포함되어 온 아파치 웹 서버 (Apache HTTP Server)가 기본적으로 포함되어 있습니다. 따라서 웹 공유 기능을 사용하기 위해 굳이 다른 웹 프로그램을 추가로 설치하거나, OS X을 서버 버전으로 업그레이드 할 필요는 없습니다.

하지만 OS X 라이언까지만 해도 시스템 환경설정의 공유 메뉴에서 웹 공유 기능을 켜고 끌 수 있었지만, OS X 마운틴 라이언부터는 더 이상 GUI를 제공하지 않고 오로지 터미널 명령어를 이용해 웹서버를 껴고 끌 수 있게 되었습니다. 


↑ OS X 라이언의 공유 설정. 웹 공유 옵션이 있음


↑ OS X 마운틴 라이언의 공유 설정. 웹 공유 옵션 없음. 그러고 보니 없어진게 한두개가 아님

간편하게 웹 공유 기능에 접근할 수 있었던 옵션이 마운틴 라이언에서 누락된 것은 아무래도 OS X 일반 버전과 서버 버전과 차별화 하려는 마케팅상의 이유가 아닌가 추측됩니다만 최근 OS X의 개발 방향을 보건데 이런 고급 기능이 완전히 제거되지 않은 것을 그나마 다행으로 생각해야 할지도 모르겠습니다. 

아무쪼록 초보자분들도 웹 서버를 쉽게 사용하실 수 있도록 최대한 자세하게 사용 방법을 정리해 보았습니다.

OS X 마운틴 라이언 웹 공유 기능을 설정하고 테스트하기

1. 웹 공유 활성화 하기

기본적으로 OS X 마운틴 라이언의 웹 공유 기능을 켜고 끌 때 아래와 같은 터미널 명령어가 사용됩니다.

웹 공유 켜기:

sudo apachectl start

웹 공유 끄기:

sudo apachectl stop

웹 공유 재시작하기:

sudo apachectl restart

* 터미널을 이용해 웹 공유를 켜거나 끄는 것이 어렵게 느껴지시는 분들은 여기서 배포하고 있는 preferencePane 방식의 프로그램을 이용해 웹 공유를 아주 쉽게 켜고 끄실 수 있습니다.

2. 공유 폴더 생성

일단 웹 공유를 시작 하기 전에 공유할 폴더를 생성해야 합니다.사용자 홈폴더에 'Sites' 폴더를 새로 만들어 줍니다. 

* 한가지 특이한 점은 이렇게 사용자가 임의로 만든 폴더임에도 불구하고 OS X 라이언에서 보던 나침반 문양이 폴더 안에 고스란히 나타나고 있습니다. 즉, 사용자가 Sites 폴더를 만들 것을 애플이 애초에 대비하고 있었거나, 라이언의 잔재가 마운틴 라이언에 고스란히 남아 있다고 볼 수 있습니다.


3. 웹 공유 작동 확인

터미널에서 아래 명령어를 입력하거나, 

sudo apachectl start

별도로 설치한 웹 공유(Web Sharing) prefPane에서 스위치를 ON으로 놓아 웹 공유를 시작합니다. 

그리고 사파리나 다른 웹 브라우저를 실행해 http://127.0.0.1 를 주소창에 넣었을 때, It works! 라는 텍스트가 나타나면 시스템 상에서 웹 서버를 작동하는데 아무런 문제가 없다는 것을 의미합니다. 

4. 웹 공유를 위한 계정 프로필 만들기

이제 앞서 만들어준 공유 폴더를 웹 서버 기본 폴더로 만들어 주는 작업이 필요합니다.

일단 사용자계정명을 알아야 합니다.

↑ 시스템 환경 설정 > 사용자 및 그룹에 들어가 1) 자물쇠를 풀고 2) 현재 사용자를 우클릭해 고급옵션으로 들어갑니다.

↑ 사용자계정명을 확인 합니다.


그리고 응용 프로그램/유틸리티 폴더에 있는 터미널 프로그램을 실행한 후 아래 명령어를 차례대로 입력해 줍니다.

sudo su -
cd /etc/apache2/users
cp Guest.conf 사용자계정명.conf
sudo nano 사용자계정명.conf

아래와 같이 Geust 폴더 경로를 사용자계정명으로 변경해 줍니다.

control + O를 눌러 작업 내역을 저장하신 후, contrl + X 단축키로 에디터를 빠져 나옵니다.


5. 웹서버 재가동

변경 내역을 적용하기 위해 웹 공유를 재시작합니다. 터미널에 아래 명령어를 입력하거나

apachectl restart 

앞서 설치한 웹 공유(Web Sharing) prefPane를 열고 서버 작동 스위치를 OFF로 놓았다 다시 ON으로 전환합니다.


6. index.html 파일을 생성해 웹 공유 기능 테스트

아래 제가 임의로 만든 index.zip 파일을 내려받은 후 압축을 풀면 index.html과 images 폴더가 나오는데 이 둘을 앞서 만들어준 Sites 폴더로 이동시킵니다. (혹은 직접 index.html 파일을 만드셔도 됩니다.) 

 index.zip


↑ Sites 폴더 위 두 파일이 잘 들어갔는지 확인

7. 최종 확인

마지막으로 사파리나 기타 웹 브라우저에서 아래 주소를 입력합니다.

http://127.0.0.1/~사용자계정명/

위 이미지처럼 나오면 성공입니다! 

이후부터는 애초 OS X의 웹 공유 기능이 필요했던 목적을 달성하시면 되겠습니다. ^^

Posted by 다오나무
iOS2012. 10. 4. 11:23

UITextField가 존재하는 뷰의 viewWillDisappear 또는 viewDidDisappear 메소드에서

[self.view endEditing:YES];

을 호출하면 해당 키보드가 내려간다.


resignFirstResponder도 물론 가능하다. 하지만 UITextField 객체가 멤버 변수로 선언 되어 있지 않을 경우

유용할 듯..

Posted by 다오나무
php2012. 9. 29. 02:52

업로드한 파일이나 이미 저장된 파일을 축소해서 썸네일을 생성하는 방법을 요약하면

1. 원본이미지를 불러온다

2. 새로이 생성될 이미지가 들어갈 집을 만든다

3. 만들어진 집에 원본이미지를 축소하여 붙여 넣는다

4. 저장한다.

예를들어 400*200 인 origin.gif 를 200*100 의 copy.gif 로 만드는 과정을 보자

// 원본 이미지 load

$path = "/images/origin.gif";

$o_img = imagecreatefromgif($path);

// 썸네일 이미지가 들어갈 집 만들기

$n_img = imagecreatetruecolor(200,100);

// 생성한 집에 원본이미지를 축소해서 넣기

imagecopyresampled($n_img,$o_img,0,0,0,0,200,100,400,200);

// 이미지 저장하기

$n_path = "/images/copy.gif";

imagegif($n_img, $n_path);

// 썸네일 생성

imagecopyresampled($n_img, $o_img, 0,0,$offsetX,$offsetY,$w,$h,$cropW,$cropH);

각각의 파라미터들은 썸네일이 될 이미지, 원본 이미지, x좌표 기준점, y좌표 기준점, x좌표, y좌표, 축소할 길이, 축소할 세로길이,

원본에서 잘라낼 가로길이, 원본에서 잘라낼 세로길이..

참 많다..

Posted by 다오나무
iOS2012. 9. 28. 09:59

  1. - (void) animateTextField: (UITextField*) textField up: (BOOL) up{
  2. int txtPosition = (textField.frame.origin.y - 140);
  3. const int movementDistance = (txtPosition < 0 ? 0 : txtPosition); // tweak as needed
  4. const float movementDuration = 0.3f; // tweak as needed
  5.  
  6. int movement = (up ? -movementDistance : movementDistance);
  7.  
  8. [UIView beginAnimations: @"anim" context: nil];
  9. [UIView setAnimationBeginsFromCurrentState: YES];
  10. [UIView setAnimationDuration: movementDuration];
  11. self.view.frame = CGRectOffset(self.view.frame, 0, movement);
  12. [UIView commitAnimations];
  13. }
  14.  
  15. - (void)textFieldDidBeginEditing:(UITextField *)textField{
  16. [self animateTextField: textField up: YES];
  17. }
  18.  
  19. - (void)textFieldDidEndEditing:(UITextField *)textField{
  20. [self animateTextField: textField up: NO];
  21. }
  22.  
  23. - (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
  24. [theTextField resignFirstResponder];
  25. return YES;
  26. }

Posted by 다오나무
iOS2012. 9. 26. 10:27

iOS5 시뮬레이터에서는 트위터 계정을 입력하여 트위터를 보낼수가 있다 ^^. 현존하는 시뮬레이터 중에서 가장 유용한 시뮬레이터가 아닌가하는 생각이 든다. iOS5에서 추가된 Twitter.framework를 이용해서 간단히 트위터 메세지를 보내는 방법에 대해서 간단히 포스팅한다.
 



우선 iOS5의 트위터 메세지 발송을 위해서는 Twitter.framework를 추가해줘야한다.
 Target중 production target을 선택하고, Build Phases에서 Link Binary With Libraries에서 Twitter.framework를 찾아서 추가한다.
 

 

storyboard에서 UIView 위에 UIButton을 추가하고 IBAction을 연결한다.


Twitter.h를 임포트하고 IBAction으로 연결된 메소드를 구현한다.
 

#import <Twitter/Twitter.h>

- (IBAction)onUpdateTwitterButton:(id)sender {

    TWTweetComposeViewController *twitter = [[TWTweetComposeViewControllerallocinit];

    [twitter setInitialText:@"iOS5 Twitter API 테스트합니다."];

    [self presentModalViewController:twitter animated:YES];

    [twitter setCompletionHandler:^(TWTweetComposeViewControllerResultresult){

        NSString *title = @"트위터 상태";

        NSString *message;

        

        if (result == TWTweetComposeViewControllerResultCancelled) {

            message = @"트위터 업데이트를 취소합니다.";

        } else {

            message = @"트위터를 업데이트 완료했습니다.";

        }

        

        [[[UIAlertView allocinitWithTitle:title message:messagedelegate:self cancelButtonTitle:nil otherButtonTitles:@"확인"nil] show];

        

        [self dismissModalViewControllerAnimated:YES];

    }];

}

 

Build and Run을 하면 다음과 같은 화면이 나타난다. 이 화면은 시뮬레이트에 트위터 계정이 설정되지 않아서 그렇다.


  Settings를 누르고 들어가서 트위터 계정으로 로그인하고 다시 실행하면 다음과 같이 트위터 컴포즈가 준비된다.

send를 누르면 트위터 페이지에 트위터가 업데이트 된것을 확인할 수 있고, setCompleteHandler에 구현한 결과처리를 한다.

 

Posted by 다오나무
Mac2012. 9. 25. 09:24

마운틴 라이언에서는 인터넷에서 다운로드 받은 어플을 설치하는 경우에 아래 그림과 같이 '확인되지 않은 개발자가 배포했기 때문에 열 수 없습니다." 메시지가 나오며 설치가 안되는 경우가 있습니다. 


아래 그림은 설정의 '보안 및 개인정보' 화면인데 왼쪽이 라이언(10.7)이고 오른쪽이 마운틴 라이언(10.8)의 그림입니다. 보시면 오른쪽에 '다음에서 다운로드한 응용프로그램을 허용' 이라는 메뉴가 추가된 것을 확인할 수 있습니다. 3가지 선택사항을 볼 수 있는데, 다음과 같습니다.

1. Mac App Store - 맥 앱스토어에서 다운 받은 것만 설치가능
2. Mac App Store 및 확인된 개발자 - 맥 앱스토어에서 다운받은 것과 확인된 개발자의 어플만 설치 가능
3. 모든곳 - 모두 가능


설치를 위해 왼쪽아래의 자물쇠 아이콘을 누른 다음, 3번째 모든 곳을 선택합니다. '모든 곳에서 허용'을 클릭합니다.


이젠 설치가 가능하게 됩니다.


제대로 설치되어 이제 이용이 가능하죠~


그래도 아직은 3가지 메뉴로 선택의 여지가 남아있긴 한데, 만약에 맥앱스토어의 어플만 허용하게 되면 지금처럼 인터넷에서 받은 어플들은 사용할 수가 없게 되겠네요. 나중에 업데이트 되더라도 이건 사용자의 선택이 맡기는 방향으로 남아있으면 합니다. :)


'Mac' 카테고리의 다른 글

osx 에서 ext4 디스크 읽기  (0) 2012.10.09
OS X 마운틴 라이언에서 웹 공유 기능 활성화하기  (0) 2012.10.04
Posted by 다오나무
iOS2012. 9. 24. 11:45

리턴키 타입을 Done으로 변경


textField.returnKeyType = UIReturnKeyDone

Posted by 다오나무
php2012. 9. 24. 07:39

http://codeigniter-kr.org


코드이그나이터 한국 포럼

Posted by 다오나무
우분투2012. 9. 22. 15:20
터미널에서 sudo nautilus 입력하세요.


_________________
Ubuntu 12.04 LTS


Posted by 다오나무