Mac&iOS 썸네일형 리스트형 XCode 10 에서는 libstdc++ 지원 관련 현재 하는 업무에서 배포하는 라이브러리에서 libstdc++ 라이브러리를 포함해야 사용가능한데, 사실 libstdc++은 XCode 8 부터 지원하지 않는다고 Apple 에서 경고하고 있었다. 그러다가 최근에 XCode 10 베타를 쓰는 고객사에서 문의가 왔다. libstdc++이 없다고.. 그래서 베타를 애플 개발자 사이트에서 받아서 깔아봤다.. 정말 없었다. 해당 lib 경로는 다음과 같다. /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/ 그럼 어떻게 하면 될까? 근본 해결 방법은 libstdc++ 대신 libc++로 되게끔 라이브러리를 재배포해야한다. 그동.. 더보기 코코아 팟 설치 Mac이나 iOS개발할때 디팬던시 매니저. AOS에 Maven 이 있다면 iOS에 있는 개념. 코코아 팟 설치 방법터미널에서sudo gem install cocoapods 검색은 사이트에서 https://cocoapods.org 더보기 XCode 8에서 iOS 6 버전대 타겟을 설정 블로그에 작성해놓은 내용인줄 알았는데, 빠져있어서 일단 추가. XCode 8 이상 버전대에서 iOS 7 이하 단말을 붙이고 실행을 하려면? XCode 8에서 iOS 6 버전대 타겟을 설정하게 하려면 지원하려면? XCode8내부에 XCode7 의 Device Support 파일을 복사해 놓는다. 나는 하위 호환 때문에 옛날 XCode도 설치해 놓는 편이다. 주로 작업은 아직도 XCode 8.3.3 을 사용하며, 구형 아이폰 테스트용으로 XCode 7.3.1도 깔아 놓기도 했다. 어쨌튼 XCode 8.3.3 내부에는 iOS 8 부터 지원하므로, XCode 구 버전에서 복사해와야 한다. 경로는 다음과 같다. /Applications/Xcode_7_3_1.app/Contents/Developer/Platform.. 더보기 lipo 명령 출처 : https://ss64.com/osx/lipo.html결과출처 : 직접 실행 스테틱 라이브러리에 다양한 빌드 아키텍쳐를 넣기 위해서는 lipo 명령을 이용한다. 아이폰 디바이스에는 arm계열이, Mac에서 시뮬레이터를 돌리려면 x86계열이 필요하다. 용량은 포함하는 만큼 늘어나므로 시뮬레이터가 필요 없다면 빼서 용량을 줄일 수 있다. 명칭이 재밌게도 아키텍쳐 빌드를 두개 이상 합쳐서 Universal 형태로 만들면 fat file이 되고, thin 옵션을 주면 Non-fat file이 된다. 1. 정보 가져오기 lipo -info libMyStatic.a 결과 예시Architectures in the fat file: libMyStatic.a are: armv7 i386 x86_64 arm64 .. 더보기 c++ 동적 로딩 관련 개발 가이드 출처 : https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/DynamicLibraryUsageGuidelines.html c++로 된 dylib를 런타임에 동적 로딩후 사용하기 위해서는 new로 생성할 수는 없고, 대신 dylib에서 new를 대신 해주는 Factory function을 제공해줘야 한다. 마찬가지로 소멸자를 호출 할 수 없으므로 마찬가지로 function을 제공해야 한다. /* File: Person.h */class Person { private: char _person_name[30]; public: Person(); Person(c.. 더보기 Objective-C 자주 찾게 되는 형변환 1. NSString to NSData UTF8로 인코딩해서 data로 만들 때 NSString* str = @"test";NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding]; 2. NSData ot NSString UTF8로 인코딩된 스트링을 data로 만들 때 // NSData* data;NSString* str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 더보기 개발관련 아이폰 화면 사이즈(3GS~6+) 더보기 framework not found IOSurface for architecture armv7 ld: framework not found IOSurface for architecture armv7clang: error: linker command failed with exit code 1 (use -v to see invocation) ld: framework not found FileProvider for architecture arm64clang: error: linker command failed with exit code 1 (use -v to see invocation) 간혹가다가 다른 xcode에서 잘 동작하던 프로그램이 빌드가 안되는 경우가 있다. 프레임워크를 추가하려고 해도 해당 프레임워크도 없고. 이경우 잘 동작하는 Xcode에서 해당 프레임워크를 복사해서 넣으면 된다. 프레임 워.. 더보기 iOS Privacy관련 This app has crashed because it attempted to access privacy-sensitive data without a usage description 카메라 촬영을 쓰는 라이브러리를 배포하다보면 꼭 이와 관련된 crash 문의를 받게 된다. iOS10 부터인가 사용자 데이터에 접근하려면 접근에 필요한 목적을 써주지 않으면 crash가 발생한다. 보통 로그에 어떻게 하라고 표시되니 로그대로 수정해주면 문제가 없다. [access] This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data... 더보기 큰 NSData를 Base64로 인코딩된 스트링으로 만들었는데 서버에서 복호화를 못한다면? 일단 이미지데이터를 NSData로 바꾼 다음 서버로 보내기 위해 Base64로 인코딩된 스트링을 만들어 주었다. UIImage *testImage = [UIImage imageNamed:@"test.png"]; NSData *imageData = UIImagePNGRepresentation(testImage); NSString *base64EncodedImageString = [imageData base64EncodedStringWithOptions:0]; NSMutableData* base64DecodedImageData = [[NSMutableData alloc] initWithBase64EncodedString:base64EncodedImageString options:0]; NSLog(@"base.. 더보기 이전 1 2 3 4 다음