로딩 화면에 보통 이미지를 추가하여 작성을 한다. 이때 이미지가 표출이 되지 않는 경우가 발생한다. 방법은 관련 파일을 지우고 다시 하면 된다. Xcode 에서 Preference - Locations -DerivedData 에서 작은 화살표 모양을 클릭하면 관련 폴더가 보인다. 여기서 Derrived Data 폴더를 클릭하여 들어간다. 여러가지 실행되었던 폴더가 보일 것이다. 이걸 다 지운다. 어차피 다시 실행하면 생기니 걱정하지 말자. 그리고 맥을 재부팅한다. 맥이 재부팅 되는 동안 테스트 폰도 마찬가지로 앱을 삭제하고 재부팅을 한다. 관련 컈시파일이 이미지를 잘 보여주지 못해서 발생하는 문제로 보인다. 모두 초기화가 되면 처음부터 다시 캐시파일이 생성되므로 되는거 같다.
XCode 업데이트 하고 난 후 발생하는 오류인거 같다. 일단 AdMob 의 앱 ID 를 확인하라고 해서 애드몹 사이트에서 확인했다. 그래도 같은 오류가 났다. 혹시나 해서 Cocoapods 도 업데이트를 했다. 그래도 같은 오류가 난다. 해결 방법은 info.plist 다음과 같은 값을 추가하면 된다. 애드몹 광고를 추가할 때 플래그가 하나 더 추가된거 같다.
File - Add 하여 기존에 사용하던 프로젝트에서 sample.swift 파일을 하나 추가하였다. 하지만 sample.swift is missing from working copy 오류가 나는 것이다. 이에 파일을 삭제하고 다시 추가해도 오류는 없어지지 않는다. 누구는 Source Control 에서 Refresh Status 를 하라고 하는데 같은 결과이다. 또 누구는 SVN 관련 오류라고 하는데 Xcode 는 Git 이 내장되어 있다. 내가 해결한 방법은 이거다. 일단 터미널을 연다. 그런 다음 해당 프로젝트가 있는 디렉토리로 간다. 거기서 다음과 같은 명령어를 입력한다. $ git add . 엔터 거짓말 처럼 오류가 사라진다. Xcode 오류가 많아졌다. 애플이 왜 이러지.....,
XCode 8 에서 GoogleMobileAds 를 추가하는데 보통 cocoapods 을 사용한다. 하지만 이부분이 오류가 나서 되지 않는다. 그래서 수동으로 추가하니 No Such Module 오류가 난다. 매뉴얼을 보니 수동으로 추가하는 방법은 이렇다. Xcode -> File -> Add Files to "Project name" 를 클릭한다. 그러면 새로운 파일 선택 창이 뜬다. 여기서 다운 받은 Framework 파일 들을 선택한다. GoogleMobileAds.framework FirebaseAnalytics.framework FirebaseInstanceID.framework GoogleInterchangeUtilities.framework GoogleSymbolUtilities.framework GoogleUtilities.framework 위와 같은 파일은 선택하고 반드시 if need copy 를 체크해야 한다. 그러면 Xcode 왼쪽 프로젝트 파일 부분에 추가가 된다. 이제 소스에서 import GoogleMobileAds 를 추가해보자. 난 이렇게 하니 오류가 나지 않는다.
Xcode 에서 배열을 만들었는데 slow index 만 뜨고 진행이 되지 않는다. 위와 같이 filter 만 걸었는데 인덱싱 문제가 발생했다. filter 부분을 주석처리하니까 괜찮아졌다. 배열 부분에서 타입이 맞지 않거나 그러면 인덱싱 문제가 발생되므로 콜렉션 분야을 다룰땐 조심해야 겠다.
잘 사용하던 Xcode 7 오류가 났다. 소스를 수정하고 컴파일 하여 테스트 하는 도중에 Could not find developer disk image 오류가 났다. 구글 검색 결과 디렉토리 가서 수정하면 된다 하여 수정했더니 또 다른 에러가 난다. 나의 해결방법은 Xcode 7 을 삭제하고 재설치 하였다. 물론 재설치 하는데 파일을 다운로드 받는 시간이 많이 걸리긴 했지만 현재 아주 잘 되고 있다.
개발을 하기 위해서는 프레임웍을 추가해야 한다. StoreKit.framework 를 추가하자. 그다음 전역헤더 파일에 추가할 내용이다. 아래와 같이 프레임워크를 임포트 하자. #import < StoreKit/StoreKit.h > 다음은 델리게이트와 사용할 전역변수를 추가한다. @interface ADViewController : UIViewController < SKProductsRequestDelegate , SKPaymentTransactionObserver > { SKProductsRequest *productsRequest; NSArray *validProcucts; } 나중에 사용할 메소드를 추가한다. - ( void )fetchAvailableProducts; - ( BOOL )canMakePurchases; - ( void )purchaseMyProduct:( SKProduct *)product; - ( IBAction )purchase:( id )sender; 이제 실행할 m 파일에서 할 내용이다 상수로 아이튠즈에서 설정한 프로덕트아이디를 설정한다. 이는 import 와 interface 사이에 추가하면 된다. #define kProductID @ "com.xxx.xxx.noAd" 이제 실행하면서 구입할 수 있는지 여부를 체크하도록 하자 이는 ViewDidLoad 에 추가했다. 다음과 같이 한 이유는 2초 이후에 실행되도록 지연실행을 걸어준것이다. [ self performSelector : @selector (fetchAvailableProducts) withObject : self afterDelay : 2.0 ]; 이제는 다음과 같이 관련 메소드를 추가한다. 여기서 입맛에...
iOS 개발할 때 날짜 관련 함수를 사용할 때가 많다. 주로 NSDate 를 이용한다. 어제를 표시하기 위해서는 다음과 같이 한다. 방법 1. NSTimeInterval secondsPerDay = 24 * 60 * 60; NSDate *yesterday = [[NSDate alloc] initWithTimeIntervalSinceNow:-secondsPerDay]; 방법 2. NSTimeInterval secondsPerDay = 24 * 60 * 60; NSDate *today = [NSDate alloc] init]; NSDate *yesterday = [today dateByAddingTimeInterval: -secondsPerDay]; 위와 같이 하면 yesterday 가 변수에 설정되었다. 이제 사용하기만 하면 된다.