Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:


0   libsystem_kernel.dylib           0x000000018b126014 0x18b107000 + 126996
1   libsystem_pthread.dylib          0x000000018b1ee450 0x18b1e9000 + 21584
2   libsystem_c.dylib                0x000000018b09a3e0 0x18b037000 + 406496
3   libc++abi.dylib                  0x000000018ab652d4 0x18ab64000 + 4820
4   libc++abi.dylib                  0x000000018ab82cc0 0x18ab64000 + 126144
5   libobjc.A.dylib                  0x000000018ab90844 0x18ab88000 + 34884
6   libc++abi.dylib                  0x000000018ab7f66c 0x18ab64000 + 112236
7   libc++abi.dylib                  0x000000018ab7ef84 0x18ab64000 + 110468
8   libobjc.A.dylib                  0x000000018ab90690 0x18ab88000 + 34448
9   CoreFoundation                   0x000000018c147428 0x18c027000 + 1180712

10  AppName                          0x00000001004dd3b8 0x100074000 + 4625336



1. 앱을 배포했을 때에 만들어둔 Archived 파일을 연다.
2. AppName.app과 AppName.app.dSYM 파일을 임의의 폴더에 복사
3. 로그 파일에 AppName 옆의 주소들을 아래와 같이 입력하면 어떤 Method에서 죽는지 확인할 수 있음.


atos -arch arm64 -o AppName.app/AppName -l 0x100074000 0x00000001004dd3b8




* arch: armv7, armv7s, arm64

Architecture에 대한 정보는 다음 주소를 참고

http://kyejusung.com/2015/10/armv7s-armv7-arm64%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90/



저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 고독한 프로그래머

댓글을 달아 주세요

iOS 10에서 사진 라이브러리에 사진을 저장하려고 하면 오류가 발생하는 경우 info.plist에 관련 키 값을 추가해줘야 합니다.


info.plist

 <key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME) uses photos</string>




* 출처: http://stackoverflow.com/a/38241350


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 고독한 프로그래머

댓글을 달아 주세요




UCC 다바다를 찾아오신 분은 '여기'로 가주세요..

프로그램을 만들다 보면 함수를 일정 시간 이후에 호출해줘야 할 때가 있습니다.

보통 1회성 타이머를 이용해서 구현하는데 Objective-C에서는 기본적으로 제공하는 기능이 있습니다.


performSelector:withObject:afterDelay:  

이 메소드는는 Selector에 해당하는 메소드를 일정시간 이후에 호출해줍니다. (Objective-C에서는 '함수 호출'을 '메시지를 보낸다'고 표현하더군요)

SEL sMethod = @selector(TestMethod);

if
([self respondsToSelector:sMethod] == YES) 

[self performSelector:sMethod withObject:nil afterDelay:0.1];


respondsToSelector는 Selector가 구현되어 있는 녀셕인가를 체크해서 YES, NO로 리턴해주는 메소드입니다.

performSelector의 1번째 인자는 selector를 넘겨주고, 2번째 인자는 selector의 1번째 인자를 넘겨줍니다. (없는 경우 nil)
그 다음 afterDelay에 실수형으로 초 단위 값을 넘겨줍니다.  

이런식으로 메소드를 호출하는 경우 현재 스레드와 동일한 스레드 내에서 실행이 됩니다.

이렇게 일정시간 이후 실행되는 메소드의 호출을 취소하고 싶은 경우엔 cancelPreviousPerformRequestsWithTarget 메소드를 호출해줍니다.
[NSRunLoop cancelPreviousPerformRequestsWithTarget:self]; 

이렇게 하면 가장 마지막에 던진 메소드가 취소됩니다.
이렇게 하지 않고 특정 메소드를 취소시키려면 Selector를 지정해주면 됩니다. 

[NSRunLoop cancelPreviousPerformRequestsWithTarget:self selector:sMethod object:nil]; 


※ 퍼가실땐 출처를 밝혀주세요. (http://shkam.tistory.com/)

 


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 고독한 프로그래머

댓글을 달아 주세요


티스토리 툴바