2009년에 철지난 2008년 iMac을 구입하고 잘 이용해 먹었었다. 그 때 당시 얼마의 HDD가 달렸는지 모르겠지만 중간에 600기가대로 업그레이트를 했었다. 이후에 윈도우도 설치해서 잘 사용하고 있었지만 시간이 지날 수록 상대적으로 점점 느려져서 잘 사용하지 않게 되었다. 


얼마전에 아마존에서 괜찮은 SSD를 아주 저렴하게 구입하게 되어 iMac에 생명 연장을 해주기로 했다. 게다가 2007년 이후 iMac 제품은 모두 OS X El Capitan을 지원한다. 


예전에 ODD를 제거 하고 HDD를 넣을려고 한번 뜯어 본적이 있어서 ODD가 IDE라는 사실을 까맣게 잊은채 그냥 IDE만 머릿속에 기억에 남아서 IDE to SATA 젠더를 여러개 구입했었다. 하지만 열어보니 그냥 SATA를 지원한다. 게다사 스펙을 보니 IDE가 아니다. Ultra ATA/100이다. OTL


아무튼 예전에 뜯어본 기억이 있지만 다시 한번 ifixit에서 분해 방법을 참고 하였다. 


준비물에는 빨판?이 꼭 필요한데. 아이폰을 거치할 때 사용하는 뾱뾱이형 빨판으로 사용해도 되는데 어디다 뒀는지 몰라서 그냥 스카치 테이프를 잘 이용했다. 


일단 자주 사용하는 드라이버가 T9, T6여서 모든 제품이 포함된 ifixit의 54Bit Driver Kit을 사용했다. 남자의 로망 공구! 그리고 Transcend사의 512GB SSD. MLC 제품! 제대로 속도가 안나오긴 하지만 뭐 상관없다! 그리고 잘 못한 IDE to SATA 젠더


처음으로는 iMac 정확한 하드웨어 스펙을 알아넀다. 그리고 OS를 살펴보니 정말 오랫동안 업데이트를 하지 않았었다. 10.7.2가 설치 되어 있다니. 10.7이면 Lion에 2011년에 나왔었다. 그 동안 윈도우를 설치해서 사용해서 더더욱 업데이트의 필요성이 없었었다. 그리고 Back to the Mac의 글을 참조해서 USB로 OS X El Capitan 이미지를 만들고 부팅을 해서 설치에 문제가 없는지 테스트 까지 끝냈다. 이제 다음 작업을 iMac을 오픈 하는 것. 


iBook, iMac, MacBook 등 많이 뜯어본 경험이 있긴하지만 뜯을 때 마다 항상 떨린다. 한방에 그냥 훅 갈수 있기 때문이다. 


일단 아래 메모리 삽입구 쪽을 열어두어야 한다. 그쪽을 열기 위해선 PH2가 적당하다. 빨판이 없어서 스카치 테이프로 대충 손잡이를 만들어서 사용했다. 


저기 유리판은 14개의 자석으로 고정되어 있기 때문에 은근 자력이 쌔서 힘 조절을 잘 해서 들어서 빼줘야 한다.  다음은 T9을 이용해서 겉 알류미늄 케이스를 빼내야 한다.  벗겨내면 이렇게 보이지만... 사진을 잘 못 찍어버렸다. OTL 그리고 하단에 시간 등을 저장하기 위한 전력을 공급하는 베터리를 제거한다. 납작한 드라이버를 사용하면 편하다. 


그리고 페널 하단에 T9을 이용해서 연결 단자를 미리 분리 해놓는다. T9을 이용해서 페널 주위를 풀어서 페널을 분리한다. 주의 할 점은 상단에 iSight와 연결되는 부분을 조심해서 제거 하도록 하자. 상단 가운데 들어내야할 HDD가 있다. HDD위에 온도 센서가 있으니 잘 뜯어낸다. 


HDD를 들어내고 커넥터를 분리하면 끝! 그리고 다시 SSD를 연결한다. 크기가 달라서 제대로 고정은 안되지만 흔들리지 않을 정도로만 고정하도록 하자. 


그리고 다시 조립을 하기 전에 SSD가 잘 연결되고 설치가 되는지 파티션 확인과 인스톨까지 되는지만 확인 하도록 하자. 나중에 발견하면 정말 ... 생각하기도 싫다. 


원래 대로 다 조립을 하고 설치를 마쳤다. 그리고 SSD의 속도를 측정을 했다. SSD 자체는 SATA 3까지 지원하는 빠른놈이지만, SATA 1을 지원하는지가 그렇게 빠르지는 않지만 기존 HDD보다는 훨 씬 빠르다. 


메모리도 2+2기가로 4기가로 구성되어 있어서 최대 6기가를 지원한다고 해서 최고 사양으로 업그레이드 시켜주고 싶지만 DDR2 4GB 모듈은 구하기도 힘들고 가격이 어마어마하게 비싸다. OTL 


부트캠프로 OS X에 200기가 나머지 300여기가를 할당해주고 윈도우 7을 설치까지 완료 하였다. 8로 넘어갈지 10으로 넘어가야 할지 고민하다가 은행, 초등학교 과제 등등 때문에 당분간은 그냥 7에 머물러야 할 것 같다. 


이제 한 몇 년간은 더 사용할 수 있지 않을까? 


이슈 해결

OS X을 설치할 때 This copy of the Install OS X El Capitan application can't be verified. 이런 메세지가 뜰때가 있다. 전지를 뽑고 나서 시간이 초기화 되어서 생기는 문제이다. 


teminal을 실행해서 아래 처럼 최신날짜를 설정해 주면된다. 월일시간년이다. 예) 2014년 4월 16일 8시 50분

date 0416085014


참조: 

http://apple.stackexchange.com/questions/216730/this-copy-of-the-install-os-x-el-capitan-application-cant-be-verified-it-may-h

http://osxdaily.com/2012/07/04/set-system-time-mac-os-x-command-line/




​ ​​마음에 드셨으면 아래 추천 버튼을 꾹 눌러주세요. :]




저작자 표시 비영리
신고
Posted by KraZYeom
TAG OSX, ssd

TabBarViewController가 있으면 그냥 selectedIndex 값을 원하는 값으로 넣으면 된다. 없으면 생성해서 또 추가 해야하니 번거롭다. 


걍 간단하게 TabBarViewController를 따로 만들지 않고 간단하게 스토리보드를 사용하여 앱 실행시 열릴 디폴트 탭을 설정할 수 있다.


  1. 스토리 보드에서 Tab Bar Controller 선택
  2. Indentity Inspector 탭 선택
  3. User Defined Runtime Attributes 에서 + 클릭
  4. Key Path는 "selectedIndex" 로 입력
  5. Type은 "Number" 로 입력
  6. Value는 원하는 인덱스 값 입력 "1"


이렇게 설정을 하면 앱이 실행할 때 설정한 탭으로 열린다. 최종 위치값을 저장해서 열게 할려면 어차피 코딩 작업이 필요하긴 하다.



저작자 표시 비영리
신고
Posted by KraZYeom

난이도: 하

@available(iOS 5.0, *)
public var multipleSelectionBackgroundView: UIView?

public var selected: Bool // set selected state (title, image, background). default is NO. animated is NO

다중 선택과 체크마크가 필요해서 간단하게 구현하는 방법을 공유하겠다. 오래전에는 이것도 구현을 했었어야 했던 기억이 있는데 엄청 간단하게 바뀌었다.


우선 다중 선택이 가능하게 하기 위해서는 아래 처럼 코드 상으로 다중 선택을 활성화 하거나,

self.tableView!.multipleTouchEnabled = true

스토리보드의 TableView에서 select 부분을 Multiple Selection을 선택을 한다.


그리고 아래 코드처럼 간단하게 구현을 하면 된다.

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
  let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
  // 1.
  cell.accessoryType = cell.selected ? .Checkmark : .None
  return cell
}

// 2.
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
  if let cell = tableView.cellForRowAtIndexPath(indexPath) {
    cell.accessoryType = .Checkmark
  }
}

// 3.
override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
  if let cell = tableView.cellForRowAtIndexPath(indexPath) {
    cell.accessoryType = .None
  }
}
  1. 현재 셀(cell)이 선택 되어 있으냐 아니냐에 따라서 체크 마크를 표시한다.
  2. 선택(select) 되었을 때는 체크 마크로 변경 한다.
  3. 선택 해제(Deselect) 되었을 때는 체크 마크를 제거 한다.




저작자 표시 비영리
신고
Posted by KraZYeom

난이도: 하


@available(iOS 8.0, *) DeviceOwnerAuthenticationWithBiometrics


@available(iOS 9.0, *) DeviceOwnerAuthentication


앱에 잠금을 하기 위해서 예전에는 직접 구현을 하거나 오픈소스를 가져다 쓰는 등으로 구현을 했었는데 iOS 8.0과 9.0에서 LocalAuthentication 라이브러리를 통해서 Touch ID와 Passcode를 지원하고 있다.


8.0에서는 Touch ID를 이용한 것만 지원하니 8.0에서 Passcode를 지원하려면 오픈소스를 가져다 쓰는게 좋긴하다.


Add Library

Project > Targets > Build Phases > Link Binary with Libraries > + > LocalAuthentication.framework 



사용방법

// 1.
if context.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthentication, error: &error) { 
// 2.
  context.evaluatePolicy(.DeviceOwnerAuthentication, localizedReason: "Authentication is required for access",
    reply: {
      (success: Bool, error) in
        if success {
          print("success")
        }
    }
  )
}
  1. 디바이스가 DeviceOwnerAuthentication을 지원하는지 검사한다. .DeviceOwnerAuthentication를 적용하면 Touch ID가 기본적용 되며, 실패시 PassCode를 입력 가능하다. 
  2. 지원을 하면 실행을 해서 한다. 성공 값이 Bool으로 반환된다. 


Passcode를 여러번 틀리면 알아서 1분 지연을 시켜준다. 그 이후에 또 실패를 하면 5분 등으로 추가적으로 시간이 더 지연된다.




저작자 표시 비영리
신고
Posted by KraZYeom


난이도: 하


오랜만에 iOS 코딩을 하려니 많은게 바뀌었다. 


UIAlertView는 9.0에서 아래와 같이 deprecated 되었고, UIAlertController를 사용하는 것을 권장한다.

@available(iOS, introduced=2.0, deprecated=9.0, message="UIAlertView is deprecated. Use UIAlertController with a preferredStyle of UIAlertControllerStyleAlert instead")


그리고 UIActionSheet도 UIAlertController를 사용하면 된다. 참고로 UIActionSheet는 아래와 같이 iOS 8.3에서 deprecated 되었다.

@available(iOS, introduced=2.0, deprecated=8.3, message="UIActionSheet is deprecated. Use UIAlertController with a preferredStyle of UIAlertControllerStyleActionSheet instead")


사용법

let alertController = UIAlertController(title: "Test Title", message: "Test Message", preferredStyle: UIAlertControllerStyle.Alert)
// .Alert .ActionSheet

let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default) { (UIAlertAction) -> Void in
  print("Okay")
}
alertController.addAction(okAction)

let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel) { (UIAlertAction) -> Void in
  print("cancel")
}
alertController.addAction(cancelAction)

let destructiveAction = UIAlertAction(title: "Destructive", style: UIAlertActionStyle.Destructive) { (UIAlertAction) -> Void in
  print("Destructive")

}
alertController.addAction(destructiveAction)

self.presentViewController(alertController, animated: true) { () -> Void in
  print("presentViewController")
}

Alert과 ActionSheet의 구분은 preferredStyle로 구분을 해주면 되고 나머지는 동일하다. 



Alert과 ActionSheet 공통으로 주의해야 할 점은 .Default와 .Destructive는 여러 개를 .addAction해서 추가 해도 되는데, .Cancel은 2개 이상 만들어서 self.presentViewController 하면 crash 된다.


UIAlertController를 만들고, 각각의 UIAlertAction을 추가해주면 된다. 워낙 간단하니 다른 설명은 하지 않도록 하겠다.



저작자 표시 비영리
신고
Posted by KraZYeom
TAG iOS 9