Category Archives: iOS/Swift

[iPhone/iPod Touch] 디바이스의 기본 정보 가져오기

요즘에 신문기사를 보면 스마트폰들이 개인정보를 빼돌리고 있다는 기사를 심심치 않게 볼 수 있습니다. 실제로 그런 어플들이 꽤 있는거 같군요. 그렇다면 아이폰 혹은 아이팟터치에서는 어떤 개인정보를 빼갈 수 있을지 한번 시도해 보겠습니다.

사용자 삽입 이미지
위와 같은 코드를 실행해 보겠습니다. 위의 코드에 대한 설명은 다음과 같습니다.


phoneName : 디바이스의 iTunes에 연결시에 정한 이름 eg) My Iphone
systemName : OS의 이름 eg) iPhone OS
systemVersion : OS의 버젼 4.1
phoneNum : 아이폰의 경우 디바이스에 할당된 전화번호
phoneUniqueIdentifier : UUID라고 불리는 아이폰/아이팟터치의 고유 시리얼

제가 언급을 깜빡하고 코드에 입력하지 못했는데요. 다음과 같은 방법으로 모델명을 알아올수도 있습니다. eg) iPhone, iPod Touch

[code]NSString *phoneModel = [[UIDevice currentDevice] model];[/code]
사용자 삽입 이미지
일단 실행결과는 위와 같습니다. 여기서 알 수 있는 점은 휴대폰 번호를 알아오지 못한다는 것입니다. null값이 나올 뿐이죠. 예전에는 이와 같은 방법으로 휴대폰 번호를 알아올 수 있었습니다. 하지만 4.x 버젼대의 OS 업그레이드와 함께 방법이 막혀버린것 같습니다.

중이 제 머리 못깎는다고 전화번호부에 있는 사람들의 정보는 가져올수 있지만 자기 자신의 정보를 가져오지는 못하는군요. 아쉽지만 휴대폰 번호를 얻어내기 위해서는 어플리케이션 상에서 사용자에게 직접 물어보는 방법을 취해야 할것 같습니다. 시나리오가 중요하겠네요.

X61에 스노우레오파드(Snow Leopard) 완벽 설치하기

* 2010년10월25일 추가

각종 KEXT파일들을 설치해보고 가장 필요한 최소한의 KEXT만으로 정리하여 다시 올립니다.
DSDT를 적용할 경우 Atheros무선랜카드와 블루투스도 자동으로 잡히고 각종 자잘한 기능이 완벽하게 동작합니다. X3100그래픽 드라이버의 온도 센서를 지원하는 FakeSMC 최신버젼을 추가하였습니다. 사운드 드라이버도 가장 사용에 지장없는 괜찮은 버젼을 넣었습니다. 이 글대로 설치해 보시면 정말 완벽하게 동작하는 맥을 만나실 수 있습니다.

예전에 작성했던 iPC OSx86 10.5.6 Universal Final을 X61에 설치하기의 경우 레오파드 계열의 가장 설치하기 쉽고 리테일에 가깝게 동작하는 배포본이었습니다. 하지만 요즘의 아이폰 관련 개발들을 해볼려 치면 SDK부터 스노우레오파드가 아니면 설치조차 할 수 없게 되었죠.

X61에 스노우레오파드를 설치해볼려는 노력은 몇번 해보았지만 기존의 상식으로는 생각보다 완벽하게 돌릴수가 없었습니다. 그러던중 InfiniteMac이라는 사이트에 올라온 X61설치 방법을 보게 됩니다. 고생끝에 꽤 간단하게 설치를 완료하였고 필요한 kext들을 설치하다 보니 거의 완벽에 가까운 맥이 완성되었습니다. 그 방법을 정리해 보겠습니다.

주의! 다음의 내용은 해킨 설치 경험자가 아니라면 따라하기 힘든 내용입니다.

* 준비물

Lenovo Thinkpad X61, 맥을사용중인 다른 PC/노트북, 노트북 분해용 드라이버(Vessel-9900추천), Snow Leopard 리테일 이미지, SATA to USB케이블, 추가 KEXT 파일들

* 설치 순서
1. X61의 중요한 데이터들을 백업합니다. 이후 드라이버를 이용하여 HDD를 분리합니다. 풀어야 할 나사는 1개입니다.

2. 분리한 디스크를 맥을 사용중인 다른 PC에 마운트 합니다. 다른 PC가 맥북이라면 SATA to USB 케이블등을 이용하여 연결해야 합니다.

3. 연결한 HDD를 GUID방식으로 파티션을 설정해 줍니다. (테스트해본결과 MBR에서도 잘 되는군요)

4. Snow Leopard 이미지를 마운트합니다. 이후에 /System/Installation/Packages/OSInstall.mpkg를 실행합니다. 이 실행파일은 마운트한 이미지내의 경로입니다. 숨겨진 디렉토리라서 찾을 수 없을 경우 터미널을 이용하도록 합시다. 마운트 위치는 /Volume 이하입니다. 터미널에서 실행하실경우 open명령을 사용하시면 됩니다.

5. 정상적으로 실행이 되면 설치가 시작됩니다. 연결한 HDD로 OS를 설치하도록 합니다.

6. 다음의 Kext들을 /System/Library/Extensions와 /Extra 안으로 설치하여 주도록 합시다. 이때에 새로운 사운드 드라이버와 충돌이 날 수 있으니 기존의 AppleHDA.kext 를 삭제해주어야 합니다.

1149322248.tgz
7. Atheros 무선랜카드를 사용할 경우 Kext파일중 AtherosFix.kext 파일안의 Info.plist파일에 자신의 PCI값을 넣어주도록 합시다. [참고]

[code]<dict>
  <key>Atheros i386</key>
  <dict>
   <key>CFBundleIdentifier</key>
   <string>com.apple.driver.AirPort.Atheros</string>
   <key>IOClass</key>
   <string>AirPort_AthrFusion</string>
   <key>IOMatchCategory</key>
   <string>IODefaultMatchCategory</string>
   <key>IONameMatch</key>
   <array>
      <string>pci106b,0086</string>
      <string>pci168c,1c</string>
      <string>pci168c,23</string>
      <string>pci168c,24</string>
   </array>
   <key>IOProbeScore</key>
   <integer>65000</integer>
   <key>IOProviderClass</key>
   <string>IOPCIDevice</string>
  </dict>
  <key>Atheros x86_64</key>
  <dict>
   <key>CFBundleIdentifier</key>
   <string>com.apple.driver.AirPort.Atheros21</string>
   <key>IOClass</key>
   <string>AirPort_AthrFusion21</string>
   <key>IOMatchCategory</key>
   <string>IODefaultMatchCategory</string>
   <key>IONameMatch</key>
   <array>
      <string>pci106b,0086</string>
      <string>pci168c,1c</string>
      <string>pci168c,23</string>
      <string>pci168c,24</string>
   </array>
   <key>IOProbeScore</key>
   <integer>60000</integer>
   <key>IOProviderClass</key>
   <string>IOPCIDevice</string>
  </dict>
 </dict>[/code]
8. Kext 설치가 어렵다면 다음의 KextUtility를 활용합니다. 64비트에서도 잘 동작합니다^^
1250278107.zip
9. 다음의 명령을 사용하여 퍼미션을 복구하여 줍니다.
[code]# sudo chown -R
# root:wheel /Volumes/YOUR_PARTITIONS_NAME/System/Library/Extensions/*
# chmod -R 755 /Volumes/YOUR_PARTITIONS_NAME/System/Library/Extensions/*[/code]
10. 해킨토시를 정상적으로 부팅하기위하여 카멜레온 부트로더를 설치하여줍니다. 여러가지를 써봤는데 잘 안되더군요. 다음은 잘 됩니다.
1196104889.gz
11. 카멜레온부트로더의 설치는 i386폴더 이하에서 이루어집니다. 다음의 명령을 사용합니다.

[code]// # diskutl list 명령을 이용하여 확인한 OS가 설치된 파티션이 /dev/disk0s2 일때
// boot0를 MBR에 설치
# sudo fdisk -f boot0 -u -y /dev/rdisk0

// boot1h를 파티션의 부트섹터에 설치
# sudo dd if=boot1h of=/dev/rdisk0s2

// boot를 파티션의 루트 디렉토리에 설치
# sudo cp boot /Volumes/YOUR_PARTITIONS_NAME/[/code]
12. /Volumes/YOUR_PARTITIONS_NAME/Extra 디렉토리를 만들어 주고 Optional Extras안에 있는 smbios.plist 파일을 복사하여 넣어줍니다.

13. 마찬가지로 Extra 디렉토리안에 com.apple.Boot.plist 파일을 생성하여 주고 아래의 내용을 넣어줍니다.

[code]<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE plist PUBLIC “-//Apple Computer//DTD PLIST 1.0//EN”
 “http://www.apple.com/DTDs/PropertyList-1.0.dtd“>
<plist version=”1.0″>
<dict>
        <key>Kernel</key>
        <string>mach_kernel</string>
        <key>Kernel Flags</key>
        <string></string>
        <key>GraphicEnabler</key>
        <string>Yes</string>
        <key>USBBusFix</key>
        <string>Yes</string>
        <key>GUI</key>
        <string>No</string>
        <key>Timeout</key>
        <string>5</string>
        <key>arch</key>
        <string>i386</string>
</dict>
</plist>[/code]

* 완료후 소감
위와 같은 과정을 거친후 HDD를 다시 X61에 연결하여 부팅해 보면 정상적으로 부팅이 되는것을 볼 수 있습니다. 위의 경우 i386이라는 옵션을 주어 32비트 모드로 부팅하도록 하고 있는데요, 안타깝게도 X61의 그래픽카드는 32비트용 드라이버밖에 지원하지 않아 64비트로 부팅을 하게되면 그래픽카드 드라이버를 잡지 못하는 문제가 발생합니다.

첫부팅시에 Kext 캐시들이 존재하지 않아 정상적으로 드라이버가 로드되지 못할 경우가 있습니다. 이경우엔 부팅시에 -f 옵션을주어 부팅하게 되면 모든 드라이버를 강제로 읽어 새로 캐시를 생성하게 됩니다. 한번만 이 옵션을 주어 부팅하고 나면 또 사용할 필요가 없습니다.

만일 SleepEnabler가 문제를 일으켜 커널 패닉이 날 경우(현재 최신 버젼까지는 문제 없음) 부팅 옵션으로 pmVersion=0를 주면 무사히 넘어갈 수 있습니다. 이후에 SleepEnabler.Kext파일을 삭제 하시면 됩니다.

듀얼부팅 환경에서 각각의 OS들간에 시간이 꼬일경우 다음의 패치를 설치하여 주면 문제를 해결할 수 있습니다.
1393211659.pkg