iOS 앱을 다운시키는 믿을 수 있는 방법은 무엇입니까?
사용자가 실제 사용자가 실수로 하지 않을 것 같은 특정 작업을 수행할 때 의도적으로 충돌시켜 현장에서 내 앱의 충돌 보고를 테스트하고 싶습니다.
하지만 컴파일 시 경고를 생성하지 않는 앱을 손상시키는 믿을 수 있는 좋은 방법은 무엇입니까?
편집: 이 질문에 대한 많은 명백한 답변은 코코아에 의해 발견되는 예외를 초래하므로 앱이 손상되지 않습니다.
Objective-C에서 C를 직접 사용하여 액세스 불량을 일으킵니다.
strcpy(0, "bla");
참고: 이것은 제가 아는 어떤 시스템에서도 작동하지만, 향후 버전의 C 런타임이나 컴파일러에서는 더 이상 충돌로 이어지지 않을 수 있습니다.Objective-C에서 null 포인터 참조 취소가 정의되지 않은 동작입니까?를 참조하십시오.
(즉시 이 작업을 수행하려면 objC에 연결해야 합니다.)
현재 제가 가장 좋아하는 것:
assert(! "crashing on purpose to test <insert your reason here>");
고전:
kill( getpid(), SIGABRT );
그리고 일부 pr0n:
*(long*)0 = 0xB16B00B5;
모두 내 충돌 보고 도구로 캡처한 충돌을 생성합니다.
우리 모두는 iOS용 Clang을 사용하기 때문에 이것은 상당히 신뢰할 수 있습니다.
__builtin_trap();
이것은 정확하게 이 목적을 위해 설계되었기 때문에 컴파일러 경고나 오류가 발생하지 않는다는 장점이 있습니다.
오래된 스택 오버플로는 어떻습니까 :)
- (void)stackOverflow
{
[self stackOverflow];
}
abort();비정상적인 종료를 유발합니다.그것은 충돌입니다.
가장 인기 있는 - 인식할 수 없는 셀렉터 충돌:
NSObject *object = [[NSObject alloc] init];
[object performSelector:@selector(asfd)];
그 수업에서 -asdf 방법이 시행되지 않았는지 확인하세요 하하.
또는 경계를 벗어난 예외를 나타내는 색인:
NSArray * array = [NSArray array];
[array objectAtIndex:5];
그리고 물론.kill( getpid(), SIGABRT );
Swift에서는 치명적인 오류를 쉽게 던질 수 있다고 생각합니다.
func foo() {
fatalError("crash!")
}
실제로 이 기능은 앱을 손상시키기 위해 무언가 잘못될 경우에도 사용하기 위한 것입니다.
특수한 경우 if 문을 피하려면 다음을 사용할 수 있습니다.precondition저도 마찬가지입니다.assert따라서 의도(원하는 경우)를 꽤 명확하게 하고 최종 릴리스에서 제거되지 않습니다.assert다음과 같이 사용됩니다.precondition(myBoolean, "This is a helpful error message for debugging.").
할당 취소된 개체로 메시지 보내기
exit(0);
(반드시...입력...30자)
예외를 발생시킬 수도 있습니다.
[NSException raise:NSInternalInconsistencyException
format:@"I want to test app crashes!."];
10개의 손가락 탭을 인식하는 보기에 제스처 인식기를 추가합니다(iPhone의 경우 10개의 손가락은 약간 혼잡할 수 있음).GR에는 앞에서 언급한 확실한 방법 중 하나를 실행하여 앱을 손상시키는 방법이 있습니다.대부분의 사용자는 앱에 손가락을 10개 대지 않기 때문에 일반 사용자가 실수로 충돌을 일으키는 것으로부터 안전합니다.
하지만 테스트 플라이트와 같은 것을 사용하거나 개인 기기에 배포하고 애플에 제출하기 전에 야생에서 테스트할 수 있어야 합니다.강제 충돌이 발생하면 Apple에서 앱을 거부할 수 있습니다.
와 같은 것을 시도할 수 있습니다.
NSArray* crashingArray = [NSArray arrayWithCapacity:1];
[crashingArray release];
EXC_B에서 충돌해야 합니다.AD_ACCESS(두 번째 릴리스가 필요할 수 있지만 일반적으로 이미 이렇게 충돌해야 함)
다음을 수행합니다.int raise(int sig);
자세한 정보를 보려면>man raise
나는 그저 정상적으로 프로세스를 종료할 것입니다.
kill(getpid(), SIGKILL);
따라서 신호가 있는 핸들러를 설치하면 열려 있는 파일이나 이런 것들의 쓰기를 끝내고 충돌을 처리할 수도 있습니다.
사용합니다
[self doesNotRecognizeSelector:_cmd];
RubyMotion으로 작업할 때 다음을 사용합니다.
n=Pointer.new ('c', 1)
n[1000] ='h'
사용해 보십시오.
- (IBAction)Button:(id)sender
{
NSArray *array = [NSArray new];
NSLog(@"%@",[array objectAtIndex:8]);
}
것NSLog이 그것을 할 입니다.
NSLog(@"%@",1);
언급URL : https://stackoverflow.com/questions/13510584/whats-a-reliable-way-to-make-an-ios-app-crash
'programing' 카테고리의 다른 글
| 선택한 실행 대상이 이 작업에 적합하지 않습니다. (0) | 2023.05.07 |
|---|---|
| 구성원을 수동으로 사용하지 않는 방법 (0) | 2023.05.07 |
| C# 디렉터리의 전체 내용 복사 (0) | 2023.05.07 |
| 그래서... 이 NoSQL 같은 것은 (0) | 2023.05.07 |
| 잘못된 포스트백 또는 콜백 인수입니다.이벤트 유효성 검사는 "를 사용하여 활성화됩니다. (0) | 2023.05.07 |