2016-12-26 55 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

我没有添加任何文字,因为我的复杂只是一张照片。我将尝试尝试使用断点并添加文本,谢谢。 –