지난 번에 Facebook 심사를 위한 앱검수 얘기를 했었는데요. 페이스북 권한을 사용하는 컨텐츠를 동영상으로 촬영해야 된다고 말씀드렸습니다. 그리고 iOS의 경우는 시뮬레이터 빌드를 준비해야 되구요. 현재 하고있는 프로젝트는 cocos2d-x 엔진을 사용하고 있는 오래된 게임입니다. 그런데 프로젝트에 문제가 생겼습니다. 최초 Facebook SDK를 홈페이지에서 다운로드 하였는데요. carthage(카르타고)로 Facebook SDK Framework가 빌드되어있었습니다. carthage로 동적 라이브러리로 관리가 되고있었는데요. 기존에 프로젝트에는 모두 static 정적 라이브러리가 적용되어있었습니다. carthage로 빌드된 라이브러리는 사용된 적이 없었죠. 그래서 최신 Facebook sdk를 적..
페이스북 로그인을 추가한 지 약 2년이 되었는데요. 사실 기능 추가만 하고 페이스북 로그인 오픈을 하지는 않았습니다. 현재 게임에서는 별 도움이 안 된다고 판단을 했었죠. 그런데 이번에 애플 로그인 얘기가 나오면서, 페이스북 로그인 역시 같이 얘기가 나오게 되었습니다. 그래서 묵은똥을 다시 한번 점검하게 되었느데요. 앱 검수를 위한 빌드를 만들어야 했습니다. 안드로이드의 경우 .apk 파일을 만들면 되기 때문에 넘어가겠습니다. 하지만 iOS의 경우는 시뮬레이터(simulator) 빌드를 만들어야 했는데요. 방법은 간단합니다. xcode에서 device를 시뮬레이터(simulator)로 지정한 후 빌드를 하면 됩니다. xcode에서 빌드를 했을 때 어느 폴더에서 만들어지를 알면 됩니다. Library ->..
기존에 국가코드를 가져오는 코드에서 문제가 발생했습니다. 코드 정보를 제대로 못 받아오는 부분이 있었는데요. 이유는 바로 유심이 없는 테스트폰이었기 때문입니다. 기존에 사용하고 있던 코드는 디바이스에 연결된 네트워크에서 정보를 가져오고 있었습니다. subscriberCellularProvider CTTelephonyNetworkInfo *sNetworkInfo = [[[CTTelephonyNetworkInfo alloc] init] autorelease]; NSString* isoCountryCode; if (@available(iOS 12.0, *)) { NSDictionary* sCarrier = [sNetworkInfo serviceSubscriberCellularProviders]; CTCarri..
요즘 애플로그인 작업을 하고 있습니다. 코드 자체는 길지도 않고 어렵지도 않은데... 인증서가 애드훅이라 테스트하는 과정이 힘드네요. [공부/iOS] - 애플 로그인1 - Sign in with Apple (Objective C) 디바이스로 애플로그인을 해보면서 테스트를 해봤는데요. 애플로그인으로 앱에 접속한 상태일 때 계정 연결을 끊게 되었을 때 처리가 필요했습니다. 게임에서 로그아웃하는 게 아닌 아이폰 설정에서 하는 걸 말합니다. 아이폰 설정창으로 가보면 애플 계정에 연결된 앱들을 볼 수 있습니다. 계정에서 암호 및 보안을 눌러보면 내 Apple ID를 사용하는 앱을 볼 수 있습니다. 눌러줍시다. 현재 연결된 앱들인데요. 2번째는 애플 공식 예제입니다. 현재 작업하고 있는 앱은 가려뒀습니다. 앱을 눌..
애플 정책에 따라 앱에서 사용자의 기본 계정 설정을 타사 소셜 로그인 서비스 (페이스북 구글, 트위터 등) 사용하는 앱은 Apple 로그인 역시 동등하게 제공해야 합니다. 사용자의 기본 계정은 사용자 식별, 로그인, 앱의 기능 및 연결된 서비스에 접근하기 위한 목적으로 앱에 설정한 계정을 의미합니다. 애플 로그인 가이드 라인 애플 로그인 예제 애플에서 이제 Objective-C는 예제도 제공하지 않는군요. 애플 공식 예제에는 Swift만 제공되어있습니다. 애플 로그인 샘플 코드 AuthenticationServices Sign In with Apple 애플 로그인은 구현하기 위해서는 AuthenticationServices.Framework 를 추가해야 합니다. Xcode 11.3+부터 사용이 가능하며 ..
UITableView는 여러 아이템을 테이블(리스트) 형태로 보여주기 위한 뷰입니다. 컬럼은 여러 개를 갖지 않고 한 가지만 가집니다. 대신 데이터를 여러 행으로 표시할 수 있게 됩니다. 각 데이터들은 TableViewCell을 통해서 표현이 됩니다. Recycle Cell 테이블 뷰는 Cell을 재사용합니다. 예를 들어서 30개의 데이터가 있고 이걸 리스트로 보여주려고 합니다. 하지만 디자인된 Cell은 화면에 5개 정도만 표시가 된다고 해봅시다. 만약 모든 데이터에 맞게 셀을 생성하게 되면 낭비가 됩니다. 즉 실제로 보이는 셀은 한정적이기 때문에 모든 데이터를 위해서 TableViewCell을 만들지는 않습니다. 화면에 보이는 셀을 만들고 재활용해서 사용하게 됩니다. 따라서 스크롤을 하게 되면 새로운..
Swift의 Object인 구조체와 클래스에 대해서 알아봤습니다. 구조체와 클래스 모두 관계가 있는 데이터를 묶어서 표현할 때 사용됩니다. 이것을 표현하면 프로퍼티와 메서드로 표현할 수 있습니다. 문법과 구조는 비슷하지만 사용되는 방식은 다른데요. 오늘은 두 가지를 비교해 봅시다. 구조체와 클래스 차이 Struct Class Value Types Reference Types Copy Share Stack Heap Fast Slow 해당 표는 Struct와 class의 차이점입니다. 하나씩 살펴 봅시다. Value Types과 Reference Types Swift에서는 구조체와 클래스는 할당되는 방식이 다릅니다. 구조체의 경우Value Type 값에 의한 복사가 이뤄집니다. struct PersonStr..
Swift의 클래스 역시 구조체처럼 관계가 있는 것들을 묶어서 표현할 때 사용됩니다. 구조체와 마찬가지로 기본적인 구조는 프로퍼티와 메서드로 구성되어있습니다. 구조체를 클래스로 변경이 쉬울 만큼 구현 문법이 동일합니다. 클래스를 알아보고 구조체와 클래스의 차이점에 대해서 알아보겠습니다. Class(클래스) 정의하기 class 클래스 이름 { // 프로퍼티 // 메서드 } 클래스의 간단한 형태입니다 class로 지칭할 수 있으며 property와 method를 가질 수 있습니다. class Person { var firstName: String = "" var lastName: String = "" // 따로 initializers를 정의하지 않고 프로퍼티를 초기화 해주어도 됩니다. func printMy..
Swift에서도 구조체와 클래스가 있습니다. 오늘은 Struct인 구조체에서 알아봅시다. 구조체는 사용자 정의 데이터 타입인데요. 구조체를 사용하면 서로 관계가 있는 것을 묶어서 표현할 수 있게 됩니다. 관계있는 것들은 어떻게 표현할 수 있을까요? 바로 프로퍼티와 메서드를 이용하여 만들어 줄 수 있습니다. Struct는 다른 기본 데이터 타입과 마찬가지로 Value Type입니다. 즉 값이 Copy가 되는 것이죠. 차근차근 알아봅시다. Struct struct [구조체의 이름] { // 프로퍼티... //메서드... } struct Position { let x: Int let y: Int } Struct는 프로퍼티와 메서드를 사용하여서 만들 수 있다고 했습니다. Position은 Int 타입 2개 x,..
Closure(클로저)는 일종의 실행 가능한 코드블럭이라고 할 수 있습니다. 이름 없는 함수(메소드)라고 합니다. 이전에 공부 한 함수는 Closure의 형태로 이름이 있는 클로저라 할 수 있습니다. C++에서의 람다와 비슷하다고 이해했습니다. 클로저는 전달 인자로도 넘겨줄 수 있으며, 변수나 상수로 저장될 수 도 있습니다. 그리고 함수의 반환 값으로도 사용할 수 있죠. 그리고 클로저는 레퍼런스 타입입니다. Closure //Closure { (parameters) -> return type in //... code } var addClosure: (Int, Int) -> Int = { (a: Int, b: Int) -> Int in return a + b } 클로저 표현 방식입니다. 함수와 비슷한 구조..
오늘은 새로 작업한 부분의 인앱 결제 테스트해야 했습니다. 따라서 iPhone 디바이스 빌드를 위해서 오랜만에 케이블을 연결했습니다. 그런데 빌드는 완료가 되었는데 앱 설치가 되지 않았습니다. iPhone is not available. 해당 팝업창이 보여지고 계속 넘어가지 않았습니다. iPhone is not available. Please reconnect the device. 다시 해보라는 말에 케이블의 연결을 해제했다가 다시 연결해보며 재시도를 했습니다. 마찬가지였습니다. 계속 해당 팝업창만 보이고 설치가 되지 않았습니다. Xcode 11.5 원인은 제 iPhone의 iOS 버전 때문이었습니다. 최근에 아이폰 코로나 관련 업데이트가 되었습니다. 바로 iOS 13.5인데요. Xcode에서 현재 iO..
Swift Colleciton Type 마지막 Set을 알아봅시다. Set은 수학에서 많이 봐왔던 집합입니다. 집합은 같은 요소를 가질 수가 없고, 집합 안의 순서도 의미가 없습니다. Swift에서도 동일합니다. 즉 고유값만 저장하는 Collection입니다. 중복된 값을 허용하지 않는다는 것이죠. 따라서 각각의 고유한 값을 순서에 대해서 고려할 필요가 없을 때에 Set을 사용 할 수 있습니다. Set 생성하기 //비어있는 Set 생성 var emptySet1: Set = [] var emptySet2 = Set() //초기화 var set1: Set = [1, 2, 3, 3, 4, 2] var set2: Set = [1, 2, 3, 3, 4, 2] //Set을 명시 하지 않으면 배열로 인식하게 됩니다...