Programming/iOS2016.06.22 00:51

ENABLE_BITCODE 설정때문에 발생하는 오류입니다.


coocapods를 사용할 경우 pods안의 프로젝트들의 ENABLE_BITCODE가 true로 설정되어 발생합니다.


podfile 안에 다음 코드를 추가하면 해결됩니다.


post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
    end
  end
end

신고
Posted by 초프(초보 프로그래머)
Programming2016.06.17 12:06

Google I/O 에서 Firebase 에 대한 발표 후 Firebase에 대한 언급이 많아지고 있네요.


테스트를 해보니 채팅을 구현하기 정말 쉬울 것 같아서 한번 만들어 보겠습니다.


채팅 구현에 여러가지 기능을 넣을 수 있겠지만 텍스트 대화와 푸시없이 구현하도록 하겠습니다.


사용하는 Firebase의 기능은 Realtime database, Authentication 입니다.



Firebase 프로젝트 설정


https://console.firebase.google.com 접속

`새로만들기` 클릭


프로젝트 `이름`과 `국가/지역` 선택



iOS 앱에 Firebase 추가



`iOS 번들 ID` 입력 (실제 iOS  bundle id 와 같아야 합니다.)



`앱 추가` 버튼을 클릭하면 `GoogleService-info.plist` 파일을 다운로드 받게 됩니다. 나중에 xcode(appcode) project 생성 후에 추가해야 하니 보관해두세요.


이후 나오는 `계속`, `완료` 버튼을 눌러 `iOS 앱에 Firebase 추가` 과정을 끝냅니다.


앱이 추가되었습니다.




회원 인증 설정


어떤 채팅이든 유저를 구분할 수 있는 로그인이 필요하죠.


Firebase에서는 Auth를 이용해 쉽게 회원기능(회원가입/ 로그인)을 구현할 수 있습니다.


Authentication (https://firebase.google.com/docs/auth/)


Authentication 에서는 이메일 인증부터 구글, 페이스북등 다양한 소셜 로그인 기능과 익명 기능이 제공됩니다.

우리 프로젝트는 익명 채팅으로 구현할거에요. 


Anonymous Authentication (https://firebase.google.com/docs/auth/ios/anonymous-auth)


콘솔 메뉴에서 Auth 를 선택합니다.




로그인 방법 설정을 클릭합니다.



  1. Anonymous 선택
  2. 사용 설정 켜기
  3. 저장



사용 설정 완료~!!!




Firebase에서 프로젝트 설정은 끝났습니다. 



iOS 프로젝트 설정


Xcode의 프로젝트 생성은 많이 해보셨을테니 저는 Appcode로 하겠습니다. ㅋ


(사용하는 Appcode의 버전은 2016.2 EAP 입니다.)


앱코드(Appcode) 실행

New project




iOS > Application > Single View Application 선택 후 Next

`Product Name`, `Organization Name`, `Organization Identifier` 입력

언어는 Objective-C, Swift 둘중 편한걸 선택하세요. 저는  Swift입니다

설정이 끝났다면 Finish




Appcode는 cocoapods이 통합되어 있어서 IDE안에서 cocoapods을 사용 가능합니다.

cocoapods podfile 생성



podfile 작성 후 pod install (cocoapods 에서 확인하세요)

platform :ios, '9.0'
use_frameworks!

target 'Shouting' do
  pod 'Firebase/Auth'
  pod 'Firebase/Database'
end


AppDelegate.swift


import UIKit
import Firebase

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        FIRApp.configure()
        return true
    }
}

Firebase console 에서 받은 GoogleService-Info.plist 를 Shouting 프로젝트에 추가합니다.



빌드하고 실행하면 오류 없이 정상 실행됩니다.


다음은 iOS 앱에서 채팅을 구현해 볼까요?

신고
Posted by 초프(초보 프로그래머)
Programming/iOS2016.03.24 17:14

Extension 사용하는 앱을 upload to app store 할때  90205, 90206 에러가 동시에 발생하는 경우

cocoapods가 원인..


1. Open the (Your App).xcodeproj file (this is the first file on the project navigator pane).
2. Switch to the target for your app extension (on the top left of the middle pane).
3. Go to the Build Phases tab
4. Click the X after "Embed Pod Frameworks"

https://github.com/CocoaPods/CocoaPods/issues/4203

신고
Posted by 초프(초보 프로그래머)
Programming/iOS2016.02.12 11:30

XCode, AppCode 등에서 iOS 앱 개발을 하다가 새로운 오류를 경험했습니다.

시뮬레이터에서 잘 되는데 실제 디바이스에서는 실행이 되지 않고 다음과 같은 오류가 발생했습니다.

AppCode

failed installing application, reason: Error Domain=JBDeviceKitErrprDomain Code=-402620392 "AMDeviceSecureUpgradeApplication failed with err = -402620392(The identity used to sign the executable is no longer valid.)" UserInfo={NSLocalizedDescription=AMDeviceSecureUpgradeApplication failed with err = -402620392(The identity used to sign the executable is no longer valid.)}. Reason: AMDeviceSecureUpgradeApplication failed with err = -402620392(The identity used to sign the executable is no longer valid.)


Xcode

The identity used to sign the executable is no longer valid.
Please verify that your device's clock is properly set, and that your signing certificate is not expired. (0xE8008018).


Device의 시간은 자동설정으로 되어 있었고 현재 시간을 표시하고 있었습니다.

Derived Data를 삭제하고 clean build 를 해봐도 같은 오류만 나올 뿐입니다.

실행 중에 발생한 오류라 인증서 문제를 생각해 볼 수 있는데요. '키체인 접근' 앱에서 확인해 보니 1년뒤 만료였습니다.

그럼 왜 안될까요....


'키체인 접근' 에서 인증서를 자세히 보니 만료된 인증서가 몇개 있었습니다. 같은 Developer의 인증서인데 만료된것과 유효한 것이 같이 있었죠.

만료된 것을 모두 지웠습니다. 그리고 XCode에서 실행하니 인증서 문제가 있다고 fix it 이 떴습니다.

fix 한 후에 실행해 보니 정상 실행됩니다~!


디바이스 실행이 안되는 오류가 있을 때에는 항상 인증서를 확인하자~!

만료된 인증서는 지워버리자~!

신고
Posted by 초프(초보 프로그래머)
Programming/Android2015.12.23 23:27

callback lambda 를 function의 parameter로 넘겨서 사용하려고 합니다.

lambda의 정의는 간단하죠.


함수 정의

fun saveFile(value: Int, callback: (value: Int) -> Void) {

}


함수 사용

functionName(10, { value -> 

})


이렇게 하면 당연히 될줄 알았습니다. 대부분의 언어에서 return 값이 없으면 void 또는 빈값을 해서요...


https://kotlinlang.org/docs/reference/functions.html#unit-returning-functions

return 값이 없을 때는 Unit type 으로 return type 을 지정해야 한다고 되어 있습니다.


함수 정의

fun saveFile(value: Int, callback: (value: Int) -> Unit) {

}


이제 문제 없이 잘 build 됩니다.

Kotlin 에서는 void return 이 아니라 Unit return 해야 합니다.


신고
Posted by 초프(초보 프로그래머)