IOS/xcode | IOS: 22개의 글
어떤 클래스에 대해 NSCopying 프로토콜을 구현하다보면 allocWithZone: 이라는 메서드에 맞닥뜨리게된다. 객체의 경우 힙(heap)에 할당되는데, 이 힙을 zone으로 나누고 해당 zone별로 메모리를 할당 및 관리하여 메모리 파편화를 막는데 도움을 주기위해 존재하는 메서드이다. 하지만 최근 런타임관련 알고리즘이 많이 효율적으로 변경되어서 굳이 zone을 사용하지 않아도되며, ARC로 바뀌면서 아예 zone을 사용하지 말라고 다음과같이 설명하고있다.1.You cannot use memory zones.There is no need to use NSZone any more—they are ignored by the modern Objective-C runtime anyway.Transitio..
iOS 네비게이션바(Navigationbar)의 좌우 툴바버튼이 폭 균형이 맞지 않을경우, 타이틀 레이블의 중앙 정렬이 한쪽으로 쏠리면서 좋지 않게 보인다. 이를 방지하여 레이블을 강제로 중앙 정렬하기 위해서 다음과 같은 방법들이 있으니 상황에따라서 적절히 적용하면 된다.방법1:viewWillAppear:에서 titleView를 hide했다가 viewDidAppear에서 titleView의 위치를 원하는대로 설정 후 unhide 이경우 타이틀레이블의 트랜지션 애니메이션은 보이지 않게되니 네비게이션 push동작이있는 상황에서는 쓰지 않는것을 추천한다.방법2:네비게이션바의 타이틀뷰에 UILabel을 상속받은 CustomTitleLabel를 set. navigationItem.titleView = [[Cust..
iOS에서 특정 시간주기로 특정 메서드을 호출하기위해 NSTimer를 사용하게 된다. 이때 앱이 백그라운드(background)로 진입할때, 그리고 잠시 후 다시 포어그라운드(foreground)로 돌아올경우 예약되어 사용중인 NSTimer가 어떻게 동작하는지 살펴보도록 하자.기본적으로 타이머의 실행 주기는 타이머가 등록되는 시간을 기준으로하여 고정 간격으로 실행(fire)된다. 이는 앱이 백그라운드로 진입하면서 잠시 타이머가 정지한다 해도 영향을 받지않고 동일하게 적용된다.백그라운드 진입시 NSTimer는 언제 정지하는가?앱이 백그라운드로 진입하면서 AppDelegate의 applicationDidEnterBackground:가 호출될 때, 특별히 명시적으로 backgroundTask를 등록하지 않은경..
맥OS에서 개발할때, 최신 버전의 SDK를 사용하면 최신 기능들을 이용해서 더 멋진 어플리케이션을 손쉽게 개발 할 수 있다. 하지만 결국 하위 호환성(backward compatibility)을 고려하지 않으면 이전 버전의 OS에서 제대로 작동하지 않는 사태가 종종 발생한다. 이러한 상황은 MacOS 뿐 아니라 iOS에서도 동일하게 적용된다.현재 필자의 개발환경은 다음과 같다.MacOS 10.7 (Lion)XCode 4.6.2 with MacOS SDK 10.8 (Mountain Lion)하지만 다음 링크에서 볼 수 있듯이 http://chitika.com/os-x-version-distribution 아직도 10.6(Snow leopard)가 점유율이 가장 높아서, 현재 개발중인 어플리케이션은 최소 스..
코코아팟(CocoaPods)을 사용하게 될경우 프로젝트(.xcproject)기반에서 워크스페이스(.xcworkspace) 기반으로 변경된다. 이때 젠킨스(Jenkins)에서 기존 프로젝트 기반 설정을 그대로 사용할경우 기본 프로젝트는 잘 컴파일되지만, 연결된 Pods 프로젝트가 업데이트 및 컴파일이 되지 않아서 -lPods 링크 에러(link error)가 나는데. 이때 Jenkins에서 CocoaPods을 잘 인식할 수 있게 할 수 있는 설정방법을 공유하고자 한다.설정 방법기존에 프로젝트 기반으로 빌드설정이 되어있던 젠킨스 빌드설정 페이지를 열고,Build 섹션에서 “Add build step” 버튼을 눌러서 Execute shell 항목을 추가 후 pod install 명령어 입력새로 추가된 Exec..
Objective-c 프로젝트에서 CocoaPods 설치 하는 방법과 거의 비슷하다. 과정 1. 프로젝트 생성 2. CocoaPods 다운로드 및 설치 3. CocoaPods 설정 4. 라이브러리 설치 및 사용 1. 프로젝트 생성 테스트 할 프로젝트를 생성한다. 2. CocoaPods 다운로드 및 설치 Swift용 Cocoapods 최초 설치시에만 한다. 기존에 설치 되어 있다면 건너띄고, 3번과정을 수행한다. 명령어 : sudo gem install cocoapods 명령어 : pod setup --verbose 3. CocoaPods 설정 터미널에서 새로 생성한 프로젝트 경로로 이동하여 초기화 명령어를 실행한다. 명령어 : pod init 실행 후 자동으로 Podfile이 생성된다. 생성된 Podfi..
과정 1.Distribution Certificates 생성 2.Distribution Provisioning Profiles 생성 3.Xcode에서 Archives를 이용한 소스 압축 후 바이너리 파일 배포 4.아이튠즈 커넥트에서 앱 제출 1.Distribution Certificates 생성 https://developer.apple.com/account/ios/certificate/ 로 접속하여 배포용 인증서를 생성하고 다운받아 설치한다. 2.Distribution Provisioning Profiles 생성 https://developer.apple.com/account/ios/profile/에 접속하여 배포용 프로비저닝 프로파일을 생성 후 다운받아 설치한다. AppStore 배포용으로 선택 > ..
Xcode SideMenu 구성하기(MFSideMenu) Android에서 Navigation Drawer의 역할과 비슷한 SideMenu를 사용해본다. SideMenu는 앱의 깊이(Depth)를 크게 줄이고, 사용자에게 조금 더 직관적인 UI를 제공해주기 때문에, FaceBook이나 쇼핑몰 앱등에서도 쉽게 볼 수 있다. MFSideMenu 라이브러리를 이용하여 SideMenu를 만들어본다. 참고. https://github.com/mikefrederick/MFSideMenu 과정 1.라이브러리 설치. 2.SideMenu 구성 3.Main화면 구성 4.Main화면과 SideMenu 연결 1.라이브러리 설치. MFSideMenu는 Cocoapods로 제공이 되므로 이를 통해 설치한다. 프로젝트 생성후, 터..
앱을 개발하는 중에 시연이나, 테스트의 목적으로 ipa 파일을 뽑아 다른 사람에게도 전달 해주는 경우가 생긴다. fastlane을 이용하여 Ad-Hoc용 ipa 파일을 추출하여 디바이스에 직접 설치해본다. ipa 파일 추출 과정 1. Ad Hoc용 프로비저닝 프로파일 생성 2. Ad Hoc용 빌드 및 ipa파일 추출 3. iTunes를 이용한 앱 설치 1. Ad Hoc용 프로비저닝 프로파일 생성 사전준비 이 과정을 진행 하기 위해선 사전준비가 필요하다. 첫번째는, 배포용 인증서가 있어야 한다. (Distribution Certificates) - 기존에 생성했던 인증서를 이용할 것이다. 두번째는, App ID가 등록되어 있어야 한다. - fastlane 설치 및 초기설정 과정에서 App ID를 등록하게 ..
참고. https://github.com/fastlane/fastlane 1. 인증서, 프로비저닝 파일 생성 및 사용 시행착오(팀단위 개발) 회사에서 팀원들과 같이 iOS 앱을 개발했을 때, 인증서와 프로비저닝 파일에 대한 개념이 없어서 각각 본인의 컴퓨터에서 인증서를 생성해 프로비저닝 파일을 따로 만들어서 사용했었다. 앱 하나를 개발하는데 여러개의 프로비저닝 파일을 만들게 되는 것이다. 그러다보니 빌드 할 때 심심치 않게 사이닝 관련 에러가 나고, 이에 대한 원인을 모르고 지나가곤 했었다. 그 후 하나의 인증서와 하나의 프로비저닝 파일을 생성하여, 여러개의 컴퓨터에서 하나의 앱을 같이 개발하는 환경을 만들어 진행했다. a. 내 컴퓨터에서 인증서를 생성한다. b. 이 인증서를 팀원들의 컴퓨터에 설치한다 ..