2014-09-25 4 views
15

스토리 보드 파일을 삭제하고 관련 Info.plist 항목을 삭제하려고 시도했지만이 시간 연장이 작동을 멈췄습니다. 그것은 심지어 Xcode에서 시작하지 않습니다.iOS8에서 스토리 보드없이 오늘 위젯을 프로그래밍 방식으로 만드는 방법은 무엇입니까?

The operation couldn’t be completed. (LaunchServicesError error 0.)

그것은 일반 응용 프로그램 (포함하는 응용 프로그램) 우리가 진입 점 및 애플리케이션 대리인의 볼 수 있지만, 방법을 너무 확장에 그것을 할로 쉽게?

답변

19

추가 Info.plist 에서 NSExtensionMainStoryboard를 제거 NSExtensionPrincipalClass = YourViewController

loadView

+2

참고 : 확장 프로그램의 info.plist에있는 NSExtension 사전 아래에 있어야합니다. – xtravar

+0

이 작업을 수행하려면이 작업을 수행해야했습니다. http://stackoverflow.com/questions/24416003/writing-an-ios-8-share-extension-without-a-storyboard –

31

에 자신의 뷰를 생성하는 것을 잊지 마세요 내가했던 다음 단계 :

  • 프로젝트
  • 에서 스토리 보드 파일을 삭제
  • info.plist 수정 :

NSExtension Dictionary로 이동하여 다음 키를 제거하십시오. NSExtensionMainStoryboard. 그것을이 키 NSExtensionPrincipalClass로 바꾸고 ViewController를 값으로 추가하십시오. TodayViewController.

전에 :

<key>NSExtension</key> 
<dict> 
    <key>NSExtensionMainStoryboard</key> 
    <string>MainInterface</string> 
    <key>NSExtensionPointIdentifier</key> 
    <string>com.apple.widget-extension</string> 
</dict> 

후 :

<key>NSExtension</key> 
<dict> 
    <key>NSExtensionPrincipalClass</key> 
    <string>TodayViewController</string> 
    <key>NSExtensionPointIdentifier</key> 
    <string>com.apple.widget-extension</string> 
</dict> 
  • 당신은 스위프트를 사용하는 경우, 당신은 목표의 빌드 설정에서 "임베디드 콘텐츠 스위프트 코드를 포함합니다"활성화해야합니다. YES로 설정하십시오.
  • 또한 내 TodayViewController 클래스 (가져 오기 이후)에 @objc (TodayViewController)을 추가해야했습니다.

앱을 지금 실행해야합니다. 하지만 할 일이 두 가지 더있었습니다.

  • 보기 만들기. 분명히 자동으로 생성 된 뷰는 없습니다.

그래서 추가이 라인 :

override func loadView() 
{ 
    view = UIView(frame:CGRect(x:0.0, y:0, width:320.0, height:200.0)) 
} 
  • 그리고 당신의 viewDidLoad 방법에 위젯의 높이를 설정 : self.preferredContentSize = CGSizeMake(0, 200)
+0

http : // http : //stackoverflow.com/questions/24416003/writing-an-ios-8-share-extension-without-a-storyboard –

+0

왜 우리는 TodayViewController 클래스에서 뷰를 만들어야하는지 물어볼 수 있습니까? View Controller에 이미 이미보기가 포함되어 있지 않습니까? – user6539552

+0

@ 라펠, 좋은 대답. 나는 iMessage 확장에 대해 비슷한 논리를 따르고 싶었지만 할 수 없었다. : -/ – Shyam

3

FWIW, 그것은 I까지 나를 위해 작동하지 않았다 내 Swift 뷰 컨트롤러 클래스에 모듈 이름 접두사를 추가했습니다 (예 :

<key>NSExtension</key> 
<dict> 
    <!-- ... --> 
    <key>NSExtensionPrincipalClass</key> 
    <string>SafariActionExtension.RootViewController</string> 
    <!-- ... --> 
</dict> 

아마도 Swift 모듈에 대한 클래스 조회는 모듈 이름을 클래스 이름 접두사로 바꾸기 때문일 수 있습니다. 예 : 코드에 클래스를 만들려면 NSStringFromClass("SafariActionExtension.RootViewController")이라고 쓰면 접두사가됩니다.

+1

접두어로 작업 할 수 없어서 클래스 이름을 지정하기 위해 @obj (RootViewController)를 사용했습니다. – Tapani

+0

이 답변은 내 문제를 해결했습니다 :-) 정답으로 표시되어야합니다 ! – Alexey

관련 문제