아이폰에서 SMS 문자 보내는 어플 만드는 방법

Apple은 sms api공개를 하고 있지 않다.
향후에도 없을것이라고한다.
이유는 모르겠고, 아래처럼 C로 단말기에 직접접근하는 방법뿐이다. 
일반휴대폰이나 임베디드제품개발시  CDMA단말기와 아래와 같은 코드로 인터페이싱한다. 
그러나, 아래와 같은 코드로 app만들면 reject될지도 모름(sms api를 공개안한건 못하게 하려한듯하므로).
AT명령어로써 단말제조업체가 제공하는 프로토콜대로 하면, 패킷을 3G망에 태워 TCPIP방식으로 장문의 메세지도 보낼 수 있다. 과금이 패킷단위라면, SKT의 경우 10초당 13원으로 TCPIP요금을 부과하고있으며,KT는 모름.
굳이 만들겠다면 kt에 확인해서 아래 미국에서 보내는 방식의 AT명령어셋과 동일한지 확인을 할 필요가있다. 통신사나 단말제조사의 스펙이 우리나라와 미국이 다를 수 있기때문이다.
So you know C, you like iPhones, and you want to programmatically send an SMS. I spent a few days of my life a few months ago figuring this out.

Here are the includes and a pretty generic funtion to connect to the iPhone modem and let you do some magic.
(I realize some of those headers aren't actually needed, I think. I copied them from my command-line tool that uses these functions.)
Code:
#include #include #include #include #include #include #include #include #include int connect(){ int speed = 115200; unsigned int null = 0; unsigned int handshake = TIOCM_DTR | TIOCM_RTS | TIOCM_CTS| TIOCM_DSR; struct termios term; int fd = open("/dev/tty.debug", O_RDWR | 0x20000 | O_NOCTTY); if(fd == -1) { perror"Error: "); exit(1); } ioctl(fd, 0x2000740D); fcntl(fd, 4, 0); tcgetattr(fd, &term); ioctl(fd, 0x8004540A, &null); cfsetspeed(&term, speed); cfmakeraw(&term); term.c_cc[VMIN] = 0; term.c_cc[VTIME] = 5; term.c_iflag = (term.c_iflag & 0xFFFFF0CD) | 5; term.c_oflag = term.c_oflag & 0xFFFFFFFE; term.c_cflag = (term.c_cflag & 0xFFFC6CFF) | 0x3CB00; term.c_lflag = term.c_lflag & 0xFFFFFA77; term.c_cflag = (term.c_cflag & ~CSIZE) | CS8; term.c_cflag &= ~PARENB; term.c_lflag &= ~ECHO; tcsetattr(fd, TCSANOW, &term); ioctl(fd, TIOCSDTR); ioctl(fd, TIOCCDTR); ioctl(fd, TIOCMSET, &handshake); return fd; }
You don't really need to understand all of that. If you want to, Google ioctl and the other functions used.

Code:
void send(char *number, char *message, int modem) { write(modem,"AT+CMGF=1\r\n",11); sleep(1); write(modem,"AT+CMGS=\"",9); write(modem,number,strlen(number)); write(modem,"\"\r\n",3); sleep(1); write(modem,message,strlen(message)); write(modem,"\x1A",1); sleep(1); close(modem); }
There is a function that takes a pointer to two strings and an int (the file-descriptor of the modem). AT+CMGF=1 sets the phone into SMS mode. AT+CMGS is the command to start writing the address and message into memory, which is terminated with "\x1A" (^Z) to finish the sending process off.

There you go. Switching plain C out for Objective C shouldn't be too hard.
__________________
http://www.ipodtouchfans.com/forums/showthread.php?t=144432



출처 : http://blog.naver.com/PostList.nhn?blogId=philipousys¤tPage=42
Posted by 오늘마감
아이폰에서 오픈소스로 Google API 사용하는 방법 정리

고맙게도 아이폰에서 Google API를 사용하기 위한 라이브러리가 오픈 소스로 있습니다.

Google Data APIs Objective-C Client Library

위 라이브러리를 사용하면, 이렇게 많은 것을 할 수 있습니다.. 대단하죠?

위 라이브러리를 아이폰에 사용하는 샘플 코드도 있습니다.
Example iPhone project showing how to use GData API for Google Docs from Objective-C.

그런데 샘플만 본다고 쉽게 되는게 아니라서..
간단히 방법을 소개 해 보겠습니다.


1. 최근 소스를 다운 받는다.

가장 최근 소스를 원하시는 분들은...
svn export http://gdata-objectivec-client.googlecode.com/svn/trunk/Source gdataSource

터미널에서 이렇게 해서 받습니다.

2. 내 프로젝트 소스 파일을 추가 한다.

xcode에서 새로운 프로젝트를 생성합니다. 
그리고 라이브러리 소스 코드를 내 프로젝트 하위 경로에 복사해 주시고, 프로젝트에 드래그 해서 추가 합니다.

그리고 사용하지 않는 파일을 제거 합니다.


위에 표시된 파일들을 제거해 줍니다. 그리고 Clients에서는 자신이 프로젝트에 사용할 파일을 남기고 제거 합니다.


2. 프로젝트 설정하기.

프로젝트에서 Get Info를 해서 프로젝트 설정을 합니다.

먼저 Configuration에서 All Configurations를 선택합니다.
  • Header Search Paths: /usr/include/libxml2
  • Other Linker Flags: -lxml2
를 각각 입력 합니다.
그리고 Configuration에서 Debug를 선택 합니다.
  • Other C Flags: -DDEBUG=1
를 입력합니다.



3. 빌드 후 사용하기.

빌드 후에 사용 하시면 됩니다.
별거 아닌데.. 전 고생을 해서 -_-;; 이렇게 글로 남깁니다.

그런데 최신 트렁크 빌드에서는 오류가 나지 않지만, 
Example iPhone project showing how to use GData API for Google Docs from Objective-C.
위 샘플에서는 아래와 같은 오류가 발생 합니다.


이건 애플사에서 iPhone 3.0 SDK에서 NSTask를 제거 해서 생긴 문제 입니다.
이 문제를 해결하는 방법은 GDataDefines.h 파일에서 아래를 추가 해 주면 됩니다. 

#define  GDATA_SKIP_LOG_XMLFORMAT 1

참고로 여기까지 해서 빌드한 샘플을 올립니다. 참고 하세요.
코딩은 전혀 없습니다 ^^;; 빌드 까지 입니다..



출처 : http://blog.naver.com/PostList.nhn?blogId=hana_815¤tPage=56
Posted by 오늘마감
아이폰기본사용2010.09.08 19:00

 
서론은 그만하고  아이팟에 내가 만든 어플 올리는 방법을 소개하겠다.

환경은 아래와 같다.
iPod Touch 2세대 (2.2.1) - 해킹된 버전(jailbreak)
OSX 10.5.4  (실제로 쓴건 iDeneb 10.5.4... 맥 살 돈이 없고..난 쓰고 싶을 뿐이고..)
Xcode Version 3.1.2

잘 모르는 사람을 대상으로 쓴 글이기에 주로 스크린샷으로 설명을 대체하겠다.

1. 프로젝트를 하나 만들어서 NIB파일을 더블클릭해 아무 컨트롤 또는 HelloWorld를 입력
  (시뮬레이터에서 컴파일하고 테스트는 가능하다 Device로 선탁해서 컴파일 하면
   Codesign어쩌고저쩌고 에러가 뜬다.)

2. 프로젝트 셋팅으로 들어간다.
  

3. 프로젝트 셋팅 화면에서 위 4개의 탭중 Build탭을 선탁 한 후 
  아래 "Add User-Defined Setting"을 클릭하여 화면과 같이 2개 값을 입력한다.
  (보기좋게 Show항목을 User-Defined Settings으로 해놓으면 좋다.)

4. 인증서를 생성해야 한다. 
  (참고 : Obtaining a Signing Identity )
  아래 위치에 있는 "키체인 접근"이란 프로그램을 실행시킨다.
  (영문 : Application > Utilities > Keychain Access )
5. 이제 인증서를 생성하자. 그냥 화면대로 따라하면 된다.
  메뉴 중 "키체인 접근 > 인증 지원 > 인증서 생성" 을 클릭한다.
  (영문 : Keychain Access menu > Certificate Assistant > Create a Certificate )

6. 인증서 생성을 클릭하면 아래와 같은 화면이 보인다.
  그곳에서 이름란에 반드시 "iPhone Developer" 라고 입력한다. (철자 틀림 주의)
  유형은 "자체 서명 루트", 기본값 무시 체크 를 한다. 그리고 계속 버튼을 클릭
  (영문 : 자체 서명 루트 == Self Signed Root)
7. 인증 정보란에는 
  다른 입력란은 Default로 입력되는 내용을 그대로 놔두고 
  인증 유형을 "코드 서명" 으로 변경하고 "계속"버튼을 누른다.
  (영문 : 코드서명 == Code Signing)
 8. 개인정보 란에는 그냥 그냥 적는다. (이름란에는 iPhone Developer... 이렇게 안적으면 어떻게 되는지 모름)
   그리고 인증서 생성 될때까지 완료 누른다.
아래와 같이 인증서 생성 완료~!!!


9. 프로젝트 디렉토리 안에 있는 Info.plist파일을 체크(수정)한다.
 만약 Info.plist파일안에
  CFBundleIdentifier 와 CFBundleName항목이 없다면 아래와 같이 추가한다. 또는 임의로 넣어주어도 된다.
 (아래 화면에서 잘 찾아서... 참고로 key와 string이 한쌍이다.)

10. 위 까지 한 후 빌드(Target : Device 2.2.1)를 하게 되면 아래와 같은 창이 뜨고 "허용"을 누르면 
   뭔가 에러가 나서 프로그램이 실행되지 않는다.
11. 그래서 방금 전 수정했던  Info.plist파일에 
  SignerIdentity란 키로 "Apple iPhone OS Application Signing"이란 값을 입력해 준다.

12. 이제 Build & Run(Go)를 누르면 실제 디바이스에서 동작하는 것을 확인 할 수 있을 것이다.
  (타겟을 iPhone 2.2.1로 설정)



우선 1차 목표는 끝냈고 문제는 어둠의 루트에서 흐르는 해킹된 어플파일 처럼 ipa파일로 만드는 방법이다.
(그래야 보관도 편하고 그러니깐... 일일이 ipod꼽고 Xcode켜고 빌드 해서 넣을 순 없잔아~)
ipa파일을 ipod에 넣는 방법은 인터넷에 많이 있으니깐 알아서... (~^_____^)~

1. 타켓을 만들어야 한다.
  과녁표시 아이콘이 그것인데 마우스 오른쪽 클릭 한 후 "Add > New Target" 을 클릭

2. 옆 메뉴 중에 Other 에 있는 Aggregate를 선택하여 Next를 클릭하자

3. Target Name은 적당히 지어주고 비록 프로젝트가 1개밖에 없지만
  현재 선택된 프로젝트가 내가 ipa로 만들고 싶은 프로젝트인지 확인한다. 그런 후 Finish클릭~

4.  Finish를 클릭하면 아래와 같은 팝업창이 뜨는 것을 확인 할 수 있다.
  당황하지 말고 상단 4개의 탭중 가장 왼쪽에 있는 Gerneral탭을 클릭한다.
5. Gerneral을 클릭하면 아래와 같은 화면이 뜨는데 Direct Dependencie...란 이름을 가진 리스트박스 바로 아래있는
  + 버튼을 눌러 프로젝트를 선택 하고 Add Target버튼을 클릭해 줍니다.
  (화면에 보이는 IPA라고 과녁표시는 무시해버리세요~ 테스트로 먼저 해본거라...)
 

  위 작업을 모두 하면 아래와 같은 화면을 볼 수 있습니다.


6. 스크립트 작성을 위해 방금 전에 만든 타겟에 마우스 오른쪽 버튼 클릭 한 후
  "Add > New Build Phase > New Run Script Build Phase" 를 클릭합니다.


7. 스크립트를 아래와 같이 작성 해 줍니다.
  참고로 띄어쓰기 조심~!!! ( if 와 [ 사이 공백 존재합니다..... 쉘스크립트 해본지 오래되서 공백안줘서 헤멘 1인)

   만약 ipa가 잘 만들어지지 않는다면 시험삼아 위에서 3번째줄까지 (if ~ fi ) 를 삭제하고 다시 해 보세요.

------------------------------------------------------------------------------------------------------
if [ $BUILD_STYLE != "AdHoc_Distribution" ]; then
exit
fi

# compress application.

/bin/mkdir $CONFIGURATION_BUILD_DIR/Payload
/bin/cp -R $CONFIGURATION_BUILD_DIR/프로젝트이름.app $CONFIGURATION_BUILD_DIR/Payload

cd $CONFIGURATION_BUILD_DIR

# zip up the Test Project
/usr/bin/zip -r 프로젝트이름.ipa Payload iTunesArtwork
------------------------------------------------------------------------------------------------------

8. ipa로 만들기 위해 아래와 같이 설정을 해 줍니다.

9. 빌드 하기 전 "Build > Clean"을 해 주는건 제 습관입니다.... 그냥 습관이에요~ ㅋㅋ
아무튼 빌드하게 되면 아래와 같이 ipa파일이 생성되는 것을 볼 수 있습니다.


글로 하자면 몇 줄 (약 20~30줄)안에 모두 설명가능한거지만
혹시 헤매고 있을 처음하시는 분을 위해 스크린샷으로 도배를 하였습니다.
(다들 알고 있는 것을 해 버린거 아닌가 모르겠네요...)

아무튼 경험상 처음하면 가장 고마운게 스크린샷으로 설명해 주시는 분이라 저도 스크린샷으로.. ^^;
이상 끝

돈없는 자취생은 하루하루 삽질해가며 이러고 있답니다. 쩝..... 

참고 URL
- 애플 개발자 사이트 : http://developer.apple.com
- 아이팟터치팬 : http://www.ipodtouchfans.com  (http://www.ipodtouchfans.com/forums/showthread.php?t=167311)
- http://www.hackint0sh.org/forum/f9/70075.htm
- http://www.iphonedevx.com/?p=59
- security 문제 해결 : http://isagoksu.com/2009/development/iphone/how-to-get-rid-of-security-policy-error/
 


출처 : http://blog.naver.com/PostView.nhn?blogId=baek2187&logNo=150067093058
Posted by 오늘마감
아이폰기본사용2010.07.02 00:48
아이폰에서 네스팟 등록하는 방법

오랜만에 쓰는 아이폰 관련 포스팅입니다.

이번에는 다른것이 아닌.... 매우 뒷북인 = _ = 네스팟 등록하기 입니다.

물론 본인도 아이폰을 사용하고 있지만 에그가 있었기때문에!!! 네스팟을 사용하지 않고 있다가

얼마전 에그를 분실했던 몇일간 학교에서 네스팟을 사용하며 그 진가를 알았기 때문에!! 요렇게 포스팅을 해 봅니다.

먼저 네스팟에 가입되셨는지를 확인하셔야하는데요!(보통 아이폰 개통시 같이 가입되지만 가끔 대리점의 실수로 개통이 안될수 있으니 체크필수!!)

(보통 114-고객센터에 문의하면 알려줄겁니다.)

** 보통 아이폰 가입시 네스팟 ID는 kt11111111(010을 제외한 본인의 휴대전화 번호)입니다.

네스팟에 가입된걸 확인하셨다면 먼저 홈페이지에 들어갑니다.

네스팟 홈페이지 - (http://internet.qook.co.kr/nespot_main/nespot_main.php)

자 이렇게 홈페이지에 들어가시면 왼쪽 상단에 MAC ID 등록이라는 부분이 있습니다. 그곳에 Go 라고 쓰여있는 버튼을 눌러줍니다.

팝업이 뜨며 ID와 비밀번호는 눌러달라고 하네요. ID : kt0000000 을 눌러주시고 비밀번호(디폴트 가입자의 주민번호 뒷자리) 를 입력해 줍니다

그러면 창이 바뀌면서 MAC ID 입력창이 뜨게 됩니다.

     

요런 화면이 뜨는데요. 전 이미 등록중이라 왼쪽처럼 표시가 되고 처음이시면 오른쪽처럼 입력을 요구하는 창이 뜰겁니다.

MAC ID 란 아이폰상의 WiFi 번호를 말하는데요 이를 확인하려면!!

설정 -> 일반 -> 정보로 들어가시면 WIFI 주소라고 쓰여져 있는 부분이 있습니다.

    

(파란색 네모안에 들어있는 12자리의 문자 입력)

MAC ID의 앞 6자리는 이미 리스트로 등록이 되어있어서 올바른 MAC ID로 등록을 하면 되고 뒤의 6자리만  " : " 표시 없이 입력해 주시면 됩니다.

이렇게 모두 입력을 하시고 확인을 누르시면 등록되었습니다!라는 팝업이 뜨고

이제 네스팟을 이용할수 있는 네스팟존(요즘은 쿡앤쇼존이라고 하더군요)에 가면 별도의 로그인 없이 네스팟을 이용할수 있습니다!!

집의 공유기에서 사용하는 Wi-Fi보다 빠르진 않지만 3G보다는 빠른 속도이며 무엇보다 데이터 과금이 되지 않는다는 부분이 가장 마음에 들더군요

의외로 네스팟이 잡히는곳이 많던데 (거의 모든 대학교) 어느정도나 되는지는 확인을 해 봐야겠네요

여튼 데이터 통화료를 아끼는데 조금의 일조를 하는 네스팟!! 의외로 등록만 해두면 따로 ID 입력이 필요 없으니 필수로! 해두면 좋을것 같습니다.

 


출처 : http://blog.naver.com/PostView.nhn?blogId=jkw1120&logNo=60105831159
Posted by 오늘마감
아이폰기본사용2010.07.01 18:08
아이폰에서 사용 안하는 기본어플 아이콘 홈화면에서 삭제하기 (주식/시계/계산기/날씨/메모장 등)

순정폰에서 기본으로 제공되는 어플들은 삭제가 불가능하기 때문에

사용하지 않는 어플 아이콘이 홈화면에서 자리만 차지한다는 불편함이 있습니다.

특히나 주식 어플은 주식을 하지 않는 사람으로서는 눈엣가시죠.

시계나 계산기, 날씨, 녹음 어플도 마찬가지.

기본어플보다 훨씬 좋은 무료어플들이 앱스토어에 많지요.

아이폰에 기본으로 제공되는 어플 아이콘을  홈화면에서 삭제하는 방법입니다.
이 방법은 순정폰에서 사용 가능하고요,

이 방법을 사용해 아이콘을 삭제하면 아이폰을 복원해야 다시 살릴 수 있으니

하시기 전에 신중을 기하시고요,

만약을 위해서 백업을 다른 곳에 저장해 두시는게 좋습니다. 

방법을 먼저 간단히 요약해 보자면

1. 아이폰 설정-일반-차단에서 사파리를 임시 차단

2. 아이튠스로 아이폰 백업하고 아이튠스 종료.

3. iBackup Bot for Itunes 프로그램으로 이 백업파일을 열고

4. 스프링보드 plist를 고쳐준 뒤 restore-재부팅

상세한 방법은 다음과 같습니다.

1.

iBackup Bot for Itunes 프로그램을 다운받고 PC에 설치합니다.
 
 * 이 프로그램의 용도와 상세한 사용법은 제 이전 글
http://blog.naver.com/tumira/40105433121 을 참조해 주세요.
 

2.

아이폰 설정 - 일반 - 차단 메뉴를 열고

아래 스샷 맨 아랫부분 "차단 끔" 부분을 클릭합니다.

차단 메뉴는 다른 사람이 아이폰으로 나쁜짓을 하지 못하도록

아이폰 사용을 임의로 제한하게 해주는 기능을 제공합니다.

집에 어린이가 있는 경우 유용하게 사용할 수 있어요.

3.

위의 차단 활성화를 눌러줍니다.

4.

암호를 입력하라는 창이 뜰겁니다.

암호를 입력해주면, 다시 입력하라는 창이 뜹니다. 한번 더 입력합니다.

이 암호는 반드시 기억해 두셔야 해요! 잊어버리시면 안됩니다!

5.

암호를 2번 입력하면  

이렇게 창이 뜰겁니다. 맨 위 Safari 우측의 파란 버튼 우측을 눌러줍니다.  

6.

사파리 사용이 차단되었습니다. 

이 상태로 홈버튼을 눌러서 설정 어플을 종료합니다.

7.

설정을 마친 후 홈화면을 확인해 보면

사파리 아이콘이 사라진 것을 보실 수 있어요.

설정- 차단에서 암호를 입력하고 다시 비활

성화 시키지 않는 한

아이폰에서 사파리를 사용할 수 없게 되는거죠.

즉, 암호를 모르면 사파리 사용이 불가능합니다.

8.

PC에서 아이튠스를 실행시키고, 아이폰을 PC에 연결한 뒤

좌측 아이폰 부분을 오른쪽 클릭해서 아래처럼 백업을 해줍니다.

9.

백업이 끝나면  아이튠스를 종료하고,  iBackup Bot을 실행합니다.

대충 아래와 같은 화면이 뜰겁니다.

10.

좌측에 보시면 백업 리스트가 보일겁니다.

이 중에서 날짜, 시간을 확인해서 방금 백업한 파일을 클릭하면

아래와 같이 파일을 읽어들인 후 파일 리스트가 좌르륵 나타납니다.

11.

파일을 찾기 좋도록, Path 부분을 클릭해서 파일을 경로별로 정렬해 줍니다.

12.

Library ≫ Preferences ≫ com.apple.springboard.plist 를 찾아줍니다.

13.

해당 파일을 더블클릭하면 아래와 같이 plist 창이 뜹니다.

plist 본문 내용은 설정이나 설치된 어플에 따라서 각각 다를겁니다.

Export 메뉴를 이용하거나, 파일 본문을 노트패드 등에 카피 -> 다른 곳에 저장 등으로 

백업을 미리 해둡니다. (만일의 사태에 대비)

14.

plist에서 아래 문구를 찾아줍니다. 

SBParentalControlsApplications

com.apple.mobilesafari

15.

이 문구에서

com.apple.mobilesafari에 해당하는 부분을

com.apple.stocks 으로 바꿔줍니다.

16.

그리고 나서 iconState2 라는 문구를 찾아줍니다.

상단 망원경 모양의 메뉴를 클릭하면 검색창이 뜹니다.

이 검색창을 이용해서 검색하셔도 됩니다.

검색창에 가려서 매치 결과가 안보이면

창을 위로 끌어 옮기면 됩니다.

17.

 iconState2 를 찾으셨다면 거기서부터 아래로 죽 내려가면서

com.apple.stocks 문구를 찾아보세요.

어플을 약 100개 정도 깔았고, 주식 어플 아이콘이 홈화면 마지막 페이지에 위치한다면

한참을 내려가야 찾을 수 있을겁니다.

18.

찾으셨다면 이 문구를

com.apple.mobilesafari 으로 바꿔줍니다.

stocks를 mobilesafari로 바꿔주시고

좌측 상단 디스켓 아이콘을 클릭해서 저장합니다.

* 만일 저장 메뉴를 클릭했는데 에러 메시지가 뜬다면

입력을 잘못했기 때문인 겁니다.

입력한 내용을 다시 찬찬히 들여다 보고 올바르게 입력해 주세요.

19.

이제 다 되었습니다. 좌측 File - Restore를 클릭합니다.

20.

아래와 같이 새 창이 뜰겁니다.

가운데 Restore only modified file(s)를 선택하고  OK 버튼을 클릭합니다.   

21.

몇분동안 Restore가 진행되고, 아이폰이 재부팅됩니다.

재부팅 후 아이폰 홈화면을 보시면 주식 아이콘이 사라졌을 겁니다.

그리고, 사파리 아이콘 위치가 변경되었을 겁니다.

사파리 아이콘이 사라졌다고 저한테 책임지라고 하지 마시고

찾아보세요. 분명히 있습니다. ^^

사파리 아이콘을 찾아서 편한 곳으로 옮기시고,

혹시나 모르니까 아이폰 검색메뉴로 Stocks를 검색해 보세요.

검색결과가 없다고 나오면 성공한 겁니다.

같은 방식으로 계산기, 메모장 등

사용하지 않는 기본 어플 아이콘을 삭제할 수 있습니다.

 이렇게 했는데도 주식 어플이 여전히 홈화면에 남아 있다면

1. 코드를 잘못 입력했다.

2,. 코드는 맞게 입력했는데, 저장을 하지 않았다.

3. 저장 메뉴인 디스켓 아이콘을 제대로 클릭하지 않아서

수정한 내용이 저장되지 않았다.

4. 저장은 했는데 Restore를 하지 않았다.

5. 위의 글 순서대로 하지 않았다.

이 5가지 중 하나일 겁니다.

특히 3번일 가능성이 제일 큽니다. 저장을 다시 하고 restore 해보세요!

뭔가를 잘못해서 문제가 생겼다면

아까 백업해둔 plist를 덮어쓰기해서 다시 restore 하시거나,  

아이튠스를 열고, "백업으로 복원" 하시면 됩니다.

* 이 팁은 외국 사이트 http://www.macosxhints.com/article.php?story=20100131111103616 에서 가져왔어요.

 


출처 : http://blog.naver.com/PostView.nhn?blogId=jkw1120&logNo=60106404553
Posted by 오늘마감
아이폰에서 IP주소 알아내기

by alex 7. 9월 2009 14:31
/*

 *  IPAdress.h

 *

 *

 */

 
#define MAXADDRS 32

 
extern char *if_names[MAXADDRS];

extern char *ip_names[MAXADDRS];

extern char *hw_addrs[MAXADDRS];

extern unsigned long ip_addrs[MAXADDRS];

 
// Function prototypes

 
void InitAddresses();

void FreeAddresses();

void GetIPAddresses();

void GetHWAddresses();

/*

 *  IPAddress.c

 *

 */

 
#include "IPAddress.h"

 
#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

 
#include "IPAddress.h"

 
#define min(a,b) ((a) < (b) ? (a) : (b))

#define max(a,b) ((a) > (b) ? (a) : (b))

 
#define BUFFERSIZE 4000

 
char *if_names[MAXADDRS];

char *ip_names[MAXADDRS];

char *hw_addrs[MAXADDRS];

unsigned long ip_addrs[MAXADDRS];

 
static int   nextAddr = 0;

 
void InitAddresses()

{

 int i;

 for (i=0; i

 {

  if_names[i] = ip_names[i] = hw_addrs[i] = NULL;

  ip_addrs[i] = 0;

 }

}

 
void FreeAddresses()

{

 int i;

 for (i=0; i

 {

  if (if_names[i] != 0) free(if_names[i]);

  if (ip_names[i] != 0) free(ip_names[i]);

  if (hw_addrs[i] != 0) free(hw_addrs[i]);

  ip_addrs[i] = 0;

 }

 InitAddresses();

}

 
void GetIPAddresses()

{

 int                 i, len, flags;

 char                buffer[BUFFERSIZE], *ptr, lastname[IFNAMSIZ], *cptr;

 struct ifconf       ifc;

 struct ifreq        *ifr, ifrcopy;

 struct sockaddr_in *sin;

 
 char temp[80];

 
 int sockfd;

 
 for (i=0; i

 {

  if_names[i] = ip_names[i] = NULL;

  ip_addrs[i] = 0;

 }

 
 sockfd = socket(AF_INET, SOCK_DGRAM, 0);

 if (sockfd < 0)

 {

  perror("socket failed");

  return;

 }

 
 ifc.ifc_len = BUFFERSIZE;

 ifc.ifc_buf = buffer;

 
 if (ioctl(sockfd, SIOCGIFCONF, &ifc) < 0)

 {

  perror("ioctl error");

  return;

 }

 
 lastname[0] = 0;

 
 for (ptr = buffer; ptr < buffer + ifc.ifc_len; )

 {

  ifr = (struct ifreq *)ptr;

  len = max(sizeof(struct sockaddr), ifr->ifr_addr.sa_len);

  ptr += sizeof(ifr->ifr_name) + len; // for next one in buffer

  
  if (ifr->ifr_addr.sa_family != AF_INET)

  {

   continue; // ignore if not desired address family

  }

  
  if ((cptr = (char *)strchr(ifr->ifr_name, ':')) != NULL)

  {

   *cptr = 0;  // replace colon will null

  }

  
  if (strncmp(lastname, ifr->ifr_name, IFNAMSIZ) == 0)

  {

   continue; /* already processed this interface */

  }

  
  memcpy(lastname, ifr->ifr_name, IFNAMSIZ);

  
  ifrcopy = *ifr;

  ioctl(sockfd, SIOCGIFFLAGS, &ifrcopy);

  flags = ifrcopy.ifr_flags;

  if ((flags & IFF_UP) == 0)

  {

   continue; // ignore if interface not up

  }

  
  if_names[nextAddr] = (char *)malloc(strlen(ifr->ifr_name)+1);

  if (if_names[nextAddr] == NULL)

  {

   return;

  }

  strcpy(if_names[nextAddr], ifr->ifr_name);

  
  sin = (struct sockaddr_in *)&ifr->ifr_addr;

  strcpy(temp, inet_ntoa(sin->sin_addr));

  
  ip_names[nextAddr] = (char *)malloc(strlen(temp)+1);

  if (ip_names[nextAddr] == NULL)

  {

   return;

  }

  strcpy(ip_names[nextAddr], temp);

  
  ip_addrs[nextAddr] = sin->sin_addr.s_addr;

  
  ++nextAddr;

 }

 
 close(sockfd);

}

 
void GetHWAddresses()

{

 struct ifconf ifc;

 struct ifreq *ifr;

 int i, sockfd;

 char buffer[BUFFERSIZE], *cp, *cplim;

 char temp[80];

 
 for (i=0; i

 {

  hw_addrs[i] = NULL;

 }

 
 sockfd = socket(AF_INET, SOCK_DGRAM, 0);

 if (sockfd < 0)

 {

  perror("socket failed");

  return;

 }

 
 ifc.ifc_len = BUFFERSIZE;

 ifc.ifc_buf = buffer;

 
 if (ioctl(sockfd, SIOCGIFCONF, (char *)&ifc) < 0)

 {

  perror("ioctl error");

  close(sockfd);

  return;

 }

 
 ifr = ifc.ifc_req;

 
 cplim = buffer + ifc.ifc_len;

 
 for (cp=buffer; cp < cplim; )

 {

  ifr = (struct ifreq *)cp;

  if (ifr->ifr_addr.sa_family == AF_LINK)

  {

   struct sockaddr_dl *sdl = (struct sockaddr_dl *)&ifr->ifr_addr;

   int a,b,c,d,e,f;

   int i;

   
   strcpy(temp, (char *)ether_ntoa(LLADDR(sdl)));

   sscanf(temp, "%x:%x:%x:%x:%x:%x", &a, &b, &c, &d, &e, &f);

   sprintf(temp, "%02X:%02X:%02X:%02X:%02X:%02X",a,b,c,d,e,f);

   
   for (i=0; i

   {

    if ((if_names[i] != NULL) && (strcmp(ifr->ifr_name, if_names[i]) == 0))

    {

     if (hw_addrs[i] == NULL)

     {

      hw_addrs[i] = (char *)malloc(strlen(temp)+1);

      strcpy(hw_addrs[i], temp);

      break;

     }

    }

   }

  }

  cp += sizeof(ifr->ifr_name) + max(sizeof(ifr->ifr_addr), ifr->ifr_addr.sa_len);

 }

 
 close(sockfd);

}

//Somewhere in your code

- (NSString *)deviceIPAdress {

 InitAddresses();

 GetIPAddresses();

 GetHWAddresses();

 return [NSString stringWithFormat:@"%s", ip_names[1]];

}

 
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.

- (void)viewDidLoad {

    [super viewDidLoad];

    ipAddress.text = [self deviceIPAdress];

}



출처 : http://blog.naver.com/PostView.nhn?blogId=amoros21&logNo=140107111097

'아이폰어플개발정보' 카테고리의 다른 글

openGL texture 만들기  (0) 2010.06.24
UIImage 를 NSData로 변환하는 방법  (0) 2010.06.24
아이폰에서 IP주소 알아내기  (0) 2010.06.24
Print CGRect  (0) 2010.06.24
흔드는거 감지하기  (0) 2010.06.24
뒤로가기 버튼 없애기  (0) 2010.06.24
Posted by 오늘마감
아이폰기본사용2010.06.23 21:17
아이폰에서 통화내역에서 원하는 번호만 지우기
어떤 이유에서든지 (?) 통화내역에서 원하는 번호만 지우고 싶어하는 유저가 있다고 생각합니다. (저도 포함 )
그래서 전에는 iLog 라던지 RecentCall 인가하는 앱을 설치해서 지우는 방식을 사용했지만 이제는 iPhone 기본전화기능중 보이는 통화내역에서 바로지우게하는 방법이 나와서 올립니다.



설치방법은 제 블로그로....(조회수올리기위한  ㅋㅋ)

http://todesto.tistory.com

 


출처 : http://blog.naver.com/PostView.nhn?blogId=neilwin&logNo=60101701469
Posted by 오늘마감
아이폰기본사용2010.06.23 21:10
아이폰에서 트위터의 글을 푸쉬 받아 보자.. Boxcar

[아이폰/트위터]

아이폰에서 트위터의 글을 푸쉬 받아 보자.. Boxcar

1. 트위터의 푸쉬란

요즘들어서 트위터를 모르는 사람이 이제 있을까? 이제는 생활의 일부가 되어버린 트위터는 나에게는 인간관계를 연결해주는 수단으로, 메신저로, 검색으로, 남을 의식하지 않고 주절 거리는 공간으로 사용을 하고있다. 트위터를 사용하면서 느끼는거지만 트위터 어플을 사용하면서 나에게 맨션을 보낸 글이나 디엠의 글을 실시간을 알려주면 이야기 할때 좀더 편하지 않을까 하는 생각을 한번씩 하게 되는데 그런 부분들을 충족시켜 주는 기능이 푸쉬 기능이다. 푸쉬란 쉽게 말해서 핸드폰으로 문자가 왔을때 문자가 왔다는 알림을 해주는 기능과 비슷하다고 생각하면 된다. 

1) 로컬푸쉬
로컬푸쉬란, 같은 트위터 앱을 사용하는 사용자에게는 DM 또는 맨션의 알림을 지원해주는 기능을 말한다. 일반적으로 사용하고 있는 트위버트 같은 경우는 같은 어플리케이션을 사용하는 사용자끼리는 서로 알려주는 기능이 있다.

2) 글로벌푸쉬
글로벌 푸쉬란, 서로 다른 트위터 앱을 사용하더라도 알림 기능을 해주는것을 말한다. 트위터를 사용하는 사용자는 꼭 앱을 사용해서 트윗을 하는 경우는 드물다. 웹에서도 할수도 있고, 다른 어플리케이션을 사용해서 할수도 있기 때문이다. 따라서 진정한 푸쉬는 글로벌 푸쉬를 지원해주는 어플리케이션이라 할수 있다.
2, 박스카의 설치 
한때 유료였던 박스카가 지금은 무료로 풀려 있다. 그래서 최근 많은 사람들이 사용을하고 있고, 그렇다 보니 한번씩 푸쉬가 문제 생기는 경우도 발생을 하기도 한다. 하지만 트위터 어플에서 푸쉬를 할수 있는 어플은 박스카 어플이 독보적이기 때문에 다른 대안이 없는듯하다. (예전에는 푸쉬가 정말 엉망이었지만, 최근은 많이 안정되었다.)
1) 엡에서 다운 받기
 
 
App Store에서 검색을 클릭해서 boxcar라고 입력을 해서 검색을 하면 위의 아이콘이 나타난다. 아직까지는 무료로 배포를 하는것 같다. (2010.04.10 기준)
Top in App Purchases라는 내용이 있는데 이건 나중에 설명을 하겠다.
2) 설치

This is my first time 에 클릭을 한다. (만약 예전 사용자라면 밑의 I`ve used Boxcar before를 클릭한다.) 
Sign Up에서 박스카에서 사용할 이메일과 패스워드를 넣고 가입을 한다.
Service로 넘어가면 위의 플러스 버튼을 누른다.

Add a Service에서  맨위에 있는 Twitter Account를 클릭한다. 아참.. 여기에서 클릭하게 되면 혹시 결제가 되지 않을까 하는 걱정을 할수도 있겠지만, 박스카 어플은 최초 서비스1개는 무료로 제공을 하고 그 이후의 서비스는 유료로 하고 있다. 트위터에서 단순히 푸쉬 알림 기능만 할려고 한다면 위의 트위터 어카운트만 설정하면 된다.
Twitter Account를 클릭하게 되면 다음 화면에서 Username 과 Password를 물어본다. 자신이 쓰고 있는 트위터의 아이디와 패스워드를 입력한다. 입력이 마치면 다음 화면에서 Allow를 클릭해서 트위터와 박스카를 연결시켜 준다.
3) 설정

박스카의 설정은 단순하다. 알림 이후에 실행시킬 트위터 어플을 설정하고, 푸쉬음을 설정하는 정도이다. 
View Your Notifications : 박스카로 푸쉬 되어진 트위터 글을 보여준다.
Services : 푸쉬의 세세한 설정을 하는 부분이다. 밑에서 자세히 설명을 하겠다.
Open Twitter Notifications Using : 트위터의 글이 푸쉬 되었을때 트위터 어플을 자동으로 실행해주는 기능에서 어떤 어플을 설정할건지 선택을 할수가 있다. 모든 어플을 사용할수가 있는것이 아니라 박스카에서 지정한 어플 중에 연동되어서 실행이 가능하다. 실행되는 이벤트도 2가지로 나뉠수가 있다.
 (1) 단순히 프로그램만 실행 시키는 경우
푸쉬에 되었을때 프로그램을 단순히 실행만 시켜서 사용자가 DM이든 맨션이든 메뉴를 직접 찾아서 봐야 하는 경우다. 대부분의 트위터 클라이언트 어플이 해당이 된다.
 (2) 해당되는 메뉴로 직접 이동되는 트위터 클라이언트 어플
푸쉬가 되었을때 해당되는 글로 자동으로 메뉴 이동이 되는 어플이다. 테스트 결과 직접 이동되는 어플을 약 2가지 정도가 있다. (SimplyTweet, Twittelator) 관련글로 직접 이동을 하게 되면 푸쉬 될때마다 일일히 클릭할 필요가 없이 메뉴로 바로 가기 때문에 트위터를 편하게 사용을 할수가 있다

푸쉬를 상세하게 설정하는 부분이다. 보통 타임라인을 뺀 나머지 부분에 체크한다. 타임라인에 체크를 하게 되면 트위터 상의 글이 올라올때마다 계속 울려되서 아마도 괴로울듯 하다.
Notifications Settings에서는 푸쉬음과 나머지 부분을 설정하는 옵션인데 마음에 드는 푸쉬음을 선택하고, Private Alerts는 꺼둔다. 만약에 켜두면 푸쉬가 오기 전에 한번더 알림을 해서 푸쉬가 될때마다 2번씩 울리게 된다.
위의 설정이 끝나면 세이브를 누르고 빠져 나오면 되고, 트위터를 사용할때마다 실시간으로 알려줌으로써 좀더 빠르고 편하게 사용을 할수가 있다.
3 박스카 사용시 의문점
1) 푸쉬가 안될 경우
박스카를 정상적으로 설치를 하고 위의 옵션도 정상적으로 했는데도 푸쉬가 안되는 경우는 여러가지 문제로 인해서 발생된다.
(1) 박스카 서버에 문제가 있는 경우 : 경험상 어플 업데이트 또는 서버 점검시 푸쉬가 안되는 경우가 있다. 초창기에는 그런 일들이 자주 있었지만 최근에는 생각보다 안정적으로 운영이 되는듯 하다.
(2) 트위터 서버와 연결이 안되어 있는 경우 : 간혹 트위터 서버에 Connetions이 안되어 있어서 푸쉬가 안되는 경우가 있다. 이런 경우는 박스카를 실행해서 계정을 삭제한 후에 다시 설치를 하게 되면 커넥션에 연결이 되는 경우가 있다.
(3) 옵션에서 아무것도 선택이 안되어 있는 경우 : 설마.. 이런경우는 .......
2) 같은 내용의 푸쉬가 2번 이상 올때
(1) 푸쉬는 크게 2가지로 글로벌 푸쉬와 같은 트위터 어플끼리 푸쉬되는 로컬 푸쉬가 있다. 박스카는 어떤 어플로 트위터를 사용하던간에 푸쉬를 해주는 글로벌 푸쉬이기 때문에, Open Twitter Notifications Using에서 선택한 어플중에 아이폰 알림에 푸쉬가 켜져 있는 경우 간혈적으로 2번 푸쉬가 올수가 있다. (박스카 푸쉬 한번, 같은 어플일 경우 푸쉬) 박스카를 사용할 경우 트위터 클라이언트 어플의 푸쉬는 꺼 버리는것이 좋다.
(2) Notifications Settings에서 Private Alerts가 활성화가 되어 있는 경우 푸쉬전에 먼저 경고를 해줌으로써 2번 알려준다. 따라서 기본적으로 비활성화 시킨다.
(3) 이것도 저것도 아닌 경우는 박스카 서버의 문제로 간혈적으로 그런 경우가 있는데 최근에는 많이 줄어든 상태다.
4 트위터 이외의 알림
박스카는 트위터 이외의 알림을 제공한다. 그 이외의 알림은 개별 결제가 되어지기 때문에 꼭 필요한 경우만 사용하는게 좋다.

 



출처 : http://blog.naver.com/PostView.nhn?blogId=mytelelink&logNo=20104427054
Posted by 오늘마감
아이폰기본사용2010.06.22 03:54
아이폰에서 요금폭탄방지, 메모리관리,아이콘을 숨겨보자 (sbsetting 설치)

아이폰을 보다 더 편하고 간편하게 설정할수잇는 sbsetting 라는 어플을 소개해드리 겠습니다. 일단 sbsetting를 사용하시려면 탈옥이 되어있고 시디아가 깔려 있어야 됩니다.

sbsetting란?
아이폰의 기본 메뉴인 설정에는 없는 기능들과 보다 간편하게 조작할수 있는 제어장치 입니다. 탈옥후 필수어플이라고도 불리우고 있으며 아이폰 설정조작을 간편하게 할수있고 아이콘 숨기기, 메모리간편관리 등이 있습니다. 이제부터 sbsetting에 대해 설명 들어갑니다.

설치법
시디아 - search 에서 sbsetting를 찾아 설치를 하여줍니다

Sbsetting 실행법

sbsetting를 설치하여도 따로 아이콘이 생성되지는 않습니다.
실행을 하기 위해선 아래 사진처럼 시계쪽부터 배터리 표시쪽까지
녹색방향으로 터치해주시면 됩니다 (ㅡㅡㅡㅡㅡ>)

Sbsetting 메뉴소개

일단 첫화면에 접속하면 다음과 같은 화면이 뜹니다.
터치한번으로 3G,블루투스,와이파이등을 켜고 끌수 있습니다 (녹색이 활성화)
Brightness(밝기)를 누르면 즉석으로 밝기를 조절할수 있습니다.

메모리 확보 기능
processes
를 누르면 멀티스태킹 작동이 되고있는 메모리를 계속 잡아먹고있는 어플이 표시되는데 전화를 뺀 필요없는 것들을 없애주시고 아래에있는 Free Up Memory 를 누르면
아이폰의 사용가능한 메모리가 확보됩니다.
※ 어플을 삭제하는것이 아니라 현재 실행되고있는 상태만 해제시켜주므로 안심하셔도 됩니다.

 가운데 중간에 있는메뉴들
more
- 아래에 설명
Refresh - 쓰잘대기없는것
Dock - Dock 어플리케이션메뉴에서 숨긴 메뉴를 표시해줌
Respring - 아이폰 재부팅효과를 부여해줌 (탈옥폰에서 유용..아이폰이 꺼지지않고 효과만 발생함) 
power - 파워셋팅을 하는곳 (별쓸모없지만 나중에 전원 버튼이 안눌릴때 쓰일지도;;)

more안 메뉴설명

화면중간에 메뉴인 more를 누르면 아래와 같은 화면이 뜹니다

Manage Themes - sbsetting의 기본 테마를 바꾸어 줄수 있습니다

Set Toggles - sbsetting의 첫화면에 보여지는 메뉴를 설정하는곳
첫화면에서 보여질 단축아이콘을 설정하는곳입니다.
대부분은 별 쓸모 없는 아이콘지만 Edge 란 아이콘은 활성화 시켜주는것이좋습니다.

요금 폭탄을 피하자!!
EDGE
란 한달무료로 준 데이터를 다›㎱뻑



출처 : http://blog.naver.com/PostView.nhn?blogId=kjw01255&logNo=50086982488
Posted by 오늘마감
아이폰기본사용2010.06.22 03:53
아이폰에서 원하는 통화목록만 삭제해보자 (Recent/CallLog Delete 설치)

아이폰에서 아쉬운 점이 하나 있다면 국산핸드폰에는 다 있는 기능인 원하는 통화목록을 삭제할수 있는 기능이 없다는 것입니다. 다른사람이 보기 원치않는 통화기록을 삭제하려면 하나하나 원하는 목록대로 지워지지않고 통화목록 전체가 지워지기 때문에 '왜 통화목록을 지웠냐며' 더 이상한 오해를 사는 결과를 가져올수 있습니다. 바로 원하는 통화목록을 하나하나 지울수 있는 어플이 Recent/CallLog Delete 란 어플입니다.

이어플은 탈옥이 되어있고 시디아가 설치되어 있는 상태에서 사용 가능합니다.

아이폰에서 원하는 통화목록 지우는 방법

1. 시디아에 접속하여 CallLog를 검색하여 다운로드 합니다.

※시디아에서도 유료어플이 존재하는데 아래 두개중 ? 모양은 무료이므로 클릭합니다.

2. 설치가 완료 되었다면 바탕화면에 따로 아이콘이 생기거나 하진 않습니다.

이제부터 아이폰에서 원하는 통화목록을 삭제할수 있습니다.

(이어플의 삭제를 원한다면 시디아-Manage-Packages 에서 이어플을 선택한후 삭제시켜주시면 됩니다.)

자 이제 아이폰의 바탕화면에서 전화목록으로 들어갑니다.

전에는 보이지 않던 편집이라는 메뉴가 추가된걸 볼수 있습니다.

편집을 클릭하면 원하는 통화목록을 삭제할수있는 왼쪽에 - 표시가 나타나는데

여기서 지우고싶은 통화목록을 선택하여 삭제시켜주면 됩니다.

016-104-1770 이란 통화기록을 삭제한 모습입니다.



출처 : http://blog.naver.com/PostView.nhn?blogId=kjw01255&logNo=50086962341
Posted by 오늘마감