2010-11-21 6 views
4

아이디어가 있으십니까?iOS에서 프로그래밍 방식으로 iPhone 앱을 다시 시작하는 방법

나는이 방법을 http://writeitstudios.com/david/?p=54

을 찾을

+7

아니요. 신의 사랑을 위해서. –

+0

글쎄, 인용문이있는 예제는 Cocoa 응용 프로그램 (코코아 터치 (iOS) 응용 프로그램이 아님)입니다. 둘째로 iOS에서 앱을 다시 시작할 수 없습니다. – itsaboutcode

+2

그리고 물론, 진짜 질문 : 왜 당신이 원합니까? –

답변

20

이 작업을 수행하는 유일한 방법은 이상적이지 않지만 작동합니다.

첫째, 앱에서 백그라운드 실행을 선택 해제해야합니다 (멀티 태스킹) 앱을 종료하면 백그라운드 작업으로 실행되지 않고 종료되어야합니다. 이것은 plist 키 UIApplicationExitsOnSuspend를 사용하여 수행됩니다.

둘째, 앱을 실행하는 데 사용할 수있는 맞춤 URL 스키마를 등록해야합니다.

셋째로로드 된 웹 페이지는 앱의 맞춤 URL 스키마로 리디렉션됩니다.

네 번째는 사용자가 인터넷에 연결되어 있어야합니다.

종료하고 다시 시작하려면 호스팅 된 리디렉션 웹 페이지에서 UIApplication openURL을 호출하십시오. 앱이 종료되고 사파리가 실행되어 페이지를로드합니다. 페이지가 Safari를 사용자 지정 URL 스키마로 리디렉션하여 Safari에서 내부적으로 openURL을 호출하여 iOS에서 앱을 실행하게합니다.

+2

만약 당신이 비뚤어 짐을 느끼고 있다면, 앱 자체에서 페이지를 호스트 할 수 있습니다 ('-applicationWillTerminate :'로 약 10 초가 걸립니다; 다른 스레드에서 서비스를 제공하는 것이 더 쉬울 수도 있지만, 똑같이 socket(), bind(), listen(), accept(), write() 및 close())를 호출합니다. 페이지를 게재 한 후 앱을 종료하고 페이지가 지연되도록 앱을 시작하도록합니다 ('새로 고침'또는 '다시로드'헤더). –

+0

UIApplicationExitsOnSuspend를 설정할 필요조차 없습니다. exit()를 호출하면됩니다. -beginBackgroundTaskWithExpirationHandler에서 "서버"를 래핑하면 앱에서 처리하기에 충분한 CPU 시간을 확보 한 다음 500ms 동안 잠자기 (데이터를 전송하도록 보장)하고 exit() 할 수 있습니다. 복잡한 비트가 요청을 구문 분석하고 있지만 500 밀리 초 동안 자고 큰 버퍼 (8K)로 읽거나 (모험을 느끼는 경우) 500 밀리 초 동안 읽기를 선택하면 퍼지 할 수 있습니다. –

+0

재미있는 ...하지만 두려운 해결책 !!! – KiNG

0

당신이 탈옥 장치를 개발하지 않는 한 간단한 일이, 애플은 심지어 당신이 프로그래밍 방식으로 귀하의 응용 프로그램을 종료 할 수 없습니다 수 있습니다. 따라서 장치를 다시 시작하는 것은 의문의 여지가 없습니다.

+2

Alexei는 장치가 아니라 앱을 다시 시작하는 것을 말합니다. 물론, 후자를 다시 시작하는 것은 의문의 여지가 없습니다. –

+0

물론 —에서 exit() 또는 kill()을 호출하거나 main() 또는 여러 가지 다른 작업 (abort() 등)에서 돌아올 수 있습니다. 충돌과 구별 될 수는 없으므로 아마 애플이 귀하의 앱을 거부하게 될 것입니다. –

+0

main()에서 리턴하는 것을 의미합니까? 나는 앱에 exit() 버튼을 추가하는 문제를 해결한다. 처음 측정과 두 번째 측정은 항상 다르기 때문에 필요합니다. –

1

당신이 링크 한 내 게시물은 iOS가 아니라 Cocoa 응용 프로그램을 말하는 것입니다. iOS에서는 exit(0);을 사용하여 애플리케이션을 종료 할 수 있지만 (Apple은이 점을 좋아하지 않습니다.) 권장하지는 않습니다. iPhone 앱을 다시 시작할 수는 없습니다.

-1

귀하의 AppDelegate 인스턴스는 응용 프로그램이 다시 시작하거나하고 있던 어떤 일을 계속해야하는지는 알아 내기 위해 논리를 넣을 수 있습니다, 방법을 여기에서

(void)applicationDidBecomeActive:(UIApplication *)application 
{ 
} 

있습니다. 예를 들어, 변수 appMustRestart이 처음에는 false 일 수 있지만 앱에서 다음에 다시 실행하려는 무언가가 발생하면 true로 트리거됩니다.

if (appMustRestart) 
{ 
    [self resetVars]; // call a method that resets all your vars to initial settings 

    // INSERT CODE HERE TO TRANSFER FOCUS TO INITIAL VIEWCONTROLLER 
} 
관련 문제