2016-12-26 57 views
1

我有一個簡單的複雜功能來從Watch Face啓動我的應用程序。它不顯示任何數據,只顯示圖像。我遵循Adding Complications to the Gallery指南,但我無法將其複雜功能添加到iPhone Watch應用程序中的併發症庫中。併發症不會出現在圖庫中

public func getLocalizableSampleTemplate(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTemplate?) -> Void) { 

    guard let tempalte = buildTemplate(for: complication) else { 
     fatalError("Unsuported Complication Family.") 
    } 
    handler(tempalte) 
} 

// Helper function to build template. 

fileprivate func buildTemplate(for complication: CLKComplication) -> CLKComplicationTemplate? { 

    let textProvider = CLKSimpleTextProvider.localizableTextProvider(withStringsFileTextKey: "Caffeine") 

    switch complication.family { 
    case .modularSmall: 

     let icon = #imageLiteral(resourceName: "Complication/Modular") 

     let complicationTemplate = CLKComplicationTemplateModularSmallSimpleImage() 
     complicationTemplate.imageProvider = CLKImageProvider(onePieceImage: icon) 

     return complicationTemplate 

    case .circularSmall: 

     let icon = #imageLiteral(resourceName: "Complication/Circular") 

     let complicationTemplate = CLKComplicationTemplateCircularSmallSimpleImage() 
     complicationTemplate.imageProvider = CLKImageProvider(onePieceImage: icon) 
     return complicationTemplate 

    case .utilitarianSmall: 

     let icon = #imageLiteral(resourceName: "Complication/Utilitarian") 

     let complicationTemplate = CLKComplicationTemplateUtilitarianSmallSquare() 
     complicationTemplate.imageProvider = CLKImageProvider(onePieceImage: icon) 
     return complicationTemplate 

    case .utilitarianLarge: 

     let icon = #imageLiteral(resourceName: "Complication/Utilitarian") 

     let complicationTemplate = CLKComplicationTemplateUtilitarianLargeFlat() 
     complicationTemplate.imageProvider = CLKImageProvider(onePieceImage: icon) 
     complicationTemplate.textProvider = textProvider 
     return complicationTemplate 

    case .utilitarianSmallFlat: 

     let icon = #imageLiteral(resourceName: "Complication/Utilitarian") 

     let complicationTemplate = CLKComplicationTemplateUtilitarianSmallFlat() 
     complicationTemplate.imageProvider = CLKImageProvider(onePieceImage: icon) 
     complicationTemplate.textProvider = textProvider 
     return complicationTemplate 

    case .extraLarge: 

     let icon = #imageLiteral(resourceName: "Complication/Extra Large") 

     let complicationTemplate = CLKComplicationTemplateExtraLargeSimpleImage() 
     complicationTemplate.imageProvider = CLKImageProvider(onePieceImage: icon) 
     return complicationTemplate 

    default: 
     return nil 
    } 
} 

complicationManifest.json文件。

{ 
    "supported complication families" : { 
    "3" : "B82ADE2C-045D-491D-87DD-C24148804480.json", 
    "6" : "A332202A-4B7B-49E0-83FB-DB398089E4FE.json", 
    "4" : "817476CB-1683-4604-A76D-2977236448AD.json", 
    "2" : "50AB27ED-0FA3-41AD-A3E7-CC9C62E48D82.json", 
    "0" : "DBE31877-7BB0-4671-B065-6FE00333929E.json", 
    "7" : "96966B70-AB8D-4DB3-AB64-AFDF1F09EB88.json" 
    }, 
    "client ID" : "net.borisy.ProductDisplayName.watchkitapp.watchkitextension" 
} 

項目設置。

Xcode Complication Configuration

故障排除。

  • 試圖重置模擬器。
  • 嘗試在真實的設備和模擬器上。
  • 通過拖動將複雜束保存爲「創建文件夾參考」gallery.ckcomplication
  • gallery.ckcomplication位於項目的根級別。與.xcodeproj相同。

更新。

我已添加更多代碼。我還將ckcomplication.strings添加到Watch Extension目標。

閱讀蘋果直營店一次以下行讓我思考:

例如,MyBundleName.ckcomplication。

也許我們假設重命名生成的文件夾名稱gallery與包名稱。我試圖去做。到目前爲止沒有運氣。

回答

0

我再次觀看this video,發現ComplicationController有前綴$(PRODUCT_MODULE_NAME)目標的偏好:

我的項目沒有過這樣的前綴,我很快發現,ComplicationController方法永遠不會被調用。因爲這是我們設置tintColor的地方,因此顯示了默認併發症。

我解決了這個問題,通過刪除我的手錶應用並觀看擴展目標並從頭開始創建。前綴出現在Xcode中,我可以在模擬器中運行的Complications Gallery中看到我的應用程序圖標。

2

我不確定你的方法的其餘部分是什麼樣的,但我有同樣的問題,直到我確定我爲我們支持的所有複雜類型添加了足夠的信息。然後它生成適當的json和圖像文件。

似乎很愚蠢的是有一個空白的文本提供商(和模板圖像匹配複雜的圖像集),但它似乎是一種解決方法。

- (void)getLocalizableSampleTemplateForComplication:(CLKComplication *)complication 
             withHandler:(void(^)(CLKComplicationTemplate *complicationTemplate))handler { 
// This method will be called once per supported complication, 
// and the results will be cached 
    UIImage *templateImage = [UIImage imageNamed:@"template"]; 
    CLKImageProvider *image = 
     [CLKImageProvider imageProviderWithOnePieceImage:templateImage]; 
    CLKTextProvider *text = [CLKTextProvider textProviderWithFormat:@""]; 
    CLKComplicationTemplate *complicationTemplate; 

    switch (complication.family) { 
    case CLKComplicationFamilyCircularSmall: { 
     CLKComplicationTemplateCircularSmallSimpleImage *small = 
      [[CLKComplicationTemplateCircularSmallSimpleImage alloc] init]; 
     small.imageProvider = image; 
     complicationTemplate = small; 
     break; 
    } 
    case CLKComplicationFamilyExtraLarge: { 
     CLKComplicationTemplateExtraLargeSimpleImage *large = 
      [[CLKComplicationTemplateExtraLargeSimpleImage alloc] init]; 
     large.imageProvider = image; 
     complicationTemplate = large; 
     break; 
    } 
    case CLKComplicationFamilyModularLarge: { 
     // Unexpected complication type. 
     break; 
    } 
    case CLKComplicationFamilyModularSmall: { 
     CLKComplicationTemplateModularSmallSimpleImage *small = 
      [[CLKComplicationTemplateModularSmallSimpleImage alloc] init]; 
     small.imageProvider = image; 
     complicationTemplate = small; 
     break; 
    } 
    case CLKComplicationFamilyUtilitarianLarge: { 
     CLKComplicationTemplateUtilitarianLargeFlat *large = 
      [[CLKComplicationTemplateUtilitarianLargeFlat alloc] init]; 
     large.imageProvider = image; 
     large.textProvider = text; 
     complicationTemplate = large; 
     break; 
    } 
    case CLKComplicationFamilyUtilitarianSmall: { 
     CLKComplicationTemplateUtilitarianSmallSquare *small = 
      [[CLKComplicationTemplateUtilitarianSmallSquare alloc] init]; 
     small.imageProvider = image; 
     complicationTemplate = small; 
     break; 
    } 
    case CLKComplicationFamilyUtilitarianSmallFlat: { 
     CLKComplicationTemplateUtilitarianSmallFlat *small = 
      [[CLKComplicationTemplateUtilitarianSmallFlat alloc] init]; 
     small.imageProvider = image; 
     small.textProvider = text; 
     complicationTemplate = small; 
     break; 
    } 
    } 
    handler(complicationTemplate); 
} 

這是哈克,我認爲正確的解決方案是提供真實圖像(和文本)的數據,但這似乎工作。

+0

我也在'buildTemplate()'方法中做同樣的事情。我正在提供真實的形象。 –

+0

你也在設置文本?你有沒有嘗試過放置一個斷點,看看它是否崩潰?這就是我發現我需要添加缺少的文本。 –

+0

我沒有添加任何文字,因爲我的複雜只是一張照片。我將嘗試嘗試使用斷點並添加文本,謝謝。 –