기본 콘텐츠로 건너뛰기

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 을 사용할 수 없다. 주의.

댓글

이 블로그의 인기 게시물

세상 간단한 https(+secured websocket): Caddy

nginx, apache2 같은 걸로 매번 certbot 연동을 통해 https 하는게 지겨워서 알아보니 Caddy라는게 있더라. 설치법은 강하게 크기 위해 알아서 해본다. # cat /etc/caddy/Caddyfile your.shitty.site:8123 {   proxy / localhost:9123 {     websocket     transparent   } } 이건 외부에서 8123으로 들어오는 걸 내부적으로 9123로 맞춰서 https 맞춰주는 reverse proxy. 만일 port를 생략하면 # cat /etc/caddy/Caddyfile your.shitty.site {   proxy / localhost:9123 {     websocket     transparent   } } 기본포트인 443으로 되어 https://your.shitty.site 로 접속이 된다. 요새 말썽이던 cloudflare 버리고 netlify domain이랑 caddy를 쓰니까 앓던 이가 빠진 느낌. 이 조합은 당분간 계속 써야겠다 싶다.

느려터진 안드로이드 에뮬은 버리고 VM을 쓰자.

iOS개발 환경이 안드로이드보다 우월점은 여러가지가 있겠지만 개인적으로 가장 큰부분이라고 생각하는 점이 iOS Simulator 의 넘사벽 속도다. 사실 iOS 의 경우 Emulator 가 아니라 Simulator 라는 훼이크를 써서 그런건데. 하드웨어+소프트웨어를 같이 하는 회사만이 쓸 수 있는 필살기라 볼 수 있다. 반면 안드로이드의 경우 ARM 에뮬레이터를 사용하는데 이게 참 못만들었다. 플스에뮬이나 GBA에뮬 반정도만 만들어도 써줄텐데 아직 갈길이 멀다. 그래서 구시렁 거리면서 하드웨어를 연결해서 테스트를 하고 있는데 역시 USB연결하는 건 불편하고 apk 를 전송하는 과정도 그다지 빠르지 않아서 개발 생산성이 월등히 나아지지는 않는다. 루팅을 하면 wifi 를 통해 apk 를 인스톨 할 수 있다고 해서 몇 가지를 해보았으나 잘 모르겠지만 인스톨까진 잘 되었는데 디버깅 모드로 실행이 되지 않아 그만두었다. 게다가 전송속도도 USB보다 wifi가 느리고 맘에 들지 않더라. 그러던중 stackoverflow.com(늘 신세지고 있습니다) 에서 "VM으로 안드로이드를 띄워서 adb connect 하면 좋아!" 라는 글에 눈이 번쩍. 시행착오를 몇번 했지만 의외로 간단하더라. 1. VMWare건 VirtualBox건 상관없다. VM호스트를 준비하자. 2. http://www.android-x86.org/download 로 가서  Deprecated x86 2.2 generic  을 받자. Q) 왜 Deprecated 인 2.2 generic 을 받나요. Deprecated는 쓰면 안되는 거 아님? A) http://mariuz.android-dev.ro/vm.iso.7z 도 있다고 한다. http://www.android-x86.org/download 에 있는 요즘 것들은 죄다 안된다. 3. 죄다 일단 Default 설정에 yes yes 하고 설치한다. 한글 문서가 필요한 분은 ...

LG G Pro 2 Custom Rom +Rooting 기록

선 루팅 https://forum.xda-developers.com/lg-g3/general/guide-root-lg-firmwares-kitkat-lollipop-t3056951 1.2버전 스크립트 모드로. echo Looking for LG serial port.. echo. adb.exe wait-for-device 여기에서 정체 상태여서 강제로 adb kill-server 했더니 알아서 재부팅하심. 폰에선 "펌웨어 업데이트"화면이 나오고 Phone found at COM5! Rooting phone.. If you don't see the SuperSu installer script runs within about a minute, then the root failed. Author : blog.lvu.kr SPECIAL COMMAND : ENTER, LEAVE ## 이런 상황이 됨. #이 느린 속도로 하나씩 증가하고 있음. 한 시간 기다려도 성과없음. 뭐 몇번해봐도 안되고 결국 불안하긴 하지만 kingroot.net  로 설치 롤리팝이니까  https://drive.google.com/file/d/0B4kfGU1z_PClQ3AyM2lKOGR1S3M/view  이걸 받아서 압축 풀기. d838recovery.bat 만 있어서 당황스럽긴한데 실행하고 1번 하니까 리커버리 모드 진입까진 잘 되는 듯. adb sideload 라는게 있어서 해봄. Advance에서 adb sideload 선택하고 USB연결한 PC에서 adb sideload RR-N-v5.8.5-20171010-d838-Final.zip 하니까 착착 잘 진행됨. 이제 흉측한 U+LTE 가 없어짐. ㅇㅋ 군더더기 없고 깔끔한데 남은 건 gapps 를 설치해야함. http://opengapps.org/  를 권해줘서 갔는데 지옥 느림. ARM + 7.1 + stock 이 기본이...