2015년 11월 5일 목요일

iOS Swift 학습 로그

오래간만에 의뢰로 iOS app을 만들고 있다.
정말 많이 편해졌다. 놀랍다.
swift만해도 벌써 몇번이나 업데이트 하고;

일단 pod 파일. cocoapod은 정말 너무 좋다.
먼저 프로젝트 생성 하고 Meteor DDP를 쓰기 위해 touch Podfile 하고

platform :ios, '8.0'
use_frameworks!

pod 'Meteor'

이렇게 쓰면 끝
pod install 한 뒤 *.xcworkspace 를 열면 끝.
* 주의: install중 중간에 정지하면 기존 pod 가 망가질 수 있음

사용은 AppDelegate.swift를 열고
전역 변수로 
let Meteor = METCoreDataDDPClient(serverURL: NSURL(string: "ws://www.YOURMETEORAPP.com/websocket")!)

지정하고 

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        Meteor.connect()
        
        return true
    }

이런 식으로 Application 기동 시 Meteor 접속.

* swiftDDP 를 내장한 RealmMeteor가 더 좋아보인다.

Storyboard 의 segue (세그웨이라고 읽음) 상당히 좋았다.

일단 첨에 진입점이 되는 Controller 에 Show Attributes Inspector를 열고 

Is Initial View Controller를 체크.
실수로 지우거나 새로 Tab Bar/Split View/Collection View/Navigator Controller 등을 생성할 때 꼭 확인하자.

View와 연결되는 *.swift controller들을 만들 땐import Foundation

import UIKit

class YOURController:UIViewController {
}

으로 시작.

간단한 사용자 정보 저장은 Key/Value Store인 NSUserDefaults.standardUserDefaults() 를 사용.

읽기는 (Boolean의 경우)

userDefaults.boolForKey("KEY")

쓰기는

userDefaults.setBool(true, forKey: "KEY")

이런 식. 다른 타입도 대동소이.

Contstraint는 뭔가 헷갈린다.
배치를 다 한 뒤 해주는 게 삽집을 덜 하는 듯.

Segue는 swift안에서 수동으로 할 때 Identifier 를 지정해야 한다.



이렇게 Segue를 선택(파랑색으로 변함)하고 Attribute Inspector에서 Identifier를 지정.

performSegueWithIdentifier("noticeSegue", sender: self)
이런 식으로 Identifier를 넣어서 사용한다.
modal Popup의 경우 viewDidLoad() 에서 호출해도 잘 되더라.

닫을 때는
self.dismissViewControllerAnimated(true, completion: {})

이런 식으로 닫으면 됨.

스토리보드와 코드사이에서 ctrl 드래그로 IBOutlet 이나 IBAction을 지정할 때
오른쪽 상단에 원두개가 겹쳐있는 아이콘(Show Assistant editor)를 열면 편리.

주의할 점은 왼쪽에 있는 Project Navigator 에서 파일을 선택해도 왼쪽 에디터만 바뀐다.
오른쪽은 상단 바를 클릭해서 찾아가야함.

UIWebView 사용 시 info.plist 에 권한을 열어줘야함.
안그러면 사용할 수 없다.

App Transport Security Settings > Allow Arbitrary Loads 에서 Boolean 을 YES로

초기 로딩할 땐
webView.loadRequest(NSURLRequest(URL: NSURL(string: "http://YOURURL/")!)) 

이런 식으로 쓰면 된다.
Memory Warning이 나면서 Crash 할 수 있는데

    override func didReceiveMemoryWarning() {
        // prevent MemoryWarning
        NSURLCache.sharedURLCache().removeAllCachedResponses()
    }

didReceiveMemoryWarning를 받아서 캐쉬를 지워주면 좀 낫다고 한다.

UIImagePickerController 사용 시 해당 Controller 에 UIImagePickerControllerDelegate, UINavigationControllerDelegate 를 추가해야함.

class CameraController:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
  ...
}

이런 식.

objective-c 형식의 파일은 header(*.h)가 들어간 파일을 swift로 bridge 파일 만들고 Build Settings 에 Swift Compiler - Code Generation > Objective-C Bridging Header 아래 Debug / Release 아래 각각 만들어 준다.


마지막으로 *.xcdatamodel 에서 Attribute명으로 description 을 사용할 수 없다. 주의.