Enz*_*ran 36 duplicates target ios ios8 ios-app-extension
在iOS 8中,当我们创建一个新的扩展时,我们必须决定它附加到哪个目标.扩展名将具有与目标相同的捆绑包ID前缀.
mal*_*lex 28
要在很多目标中共享一个窗口小部件,应该只Embedded Binaries
在General
配置选项卡中为每个父目标添加widget.appex目标
然后你会自动获得Embed App Extensions
区域Build Phases
小智 14
这是我的设置:我有3个目标(生产,登台,本地)和扩展目标,我不想重复3次.
只是为了澄清Neo Chen的答案,编辑你的每个父目标的方案:
构建>预执行>新运行脚本操作>从(父方案)提供构建设置.
粘贴每个扩展名:
#!/bin/bash
buildID=${PRODUCT_BUNDLE_IDENTIFIER}
extId="notification-service"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $buildID.$extId" "${SRCROOT}/${extId}/Info.plist"
Run Code Online (Sandbox Code Playgroud)
似乎在第一次构建时工作.
leo*_*aka 10
看起来您应该只能使用自己的Info.plist复制Extension目标,但不能复制任何其他内容.
但是,当您创建扩展时,Xcode会将"嵌入应用程序扩展"添加到应用程序目标的构建阶段,如下所示,并且还没有UI可以执行此操作.
仍然,您可以为第二个目标创建扩展,然后删除除.plist之外的所有文件,并修复需要修复的内容.这是一步一步:
小智 6
我已经创建了一个运行脚本来支持此要求
#!/bin/sh
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${SRCROOT}/ImagePush/Info.plist"
buildVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $buildVersion" "${SRCROOT}/ImagePush/Info.plist"
buildID=${PRODUCT_BUNDLE_IDENTIFIER}
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $buildID.ImagePush" "${SRCROOT}/ImagePush/Info.plist"
Run Code Online (Sandbox Code Playgroud)
ImagePush是我的扩展
添加到您需要的目标并添加,确保此脚本在构建阶段中的扩展设置之前运行,然后您只需执行两次构建操作(PS:第一次失败,将尝试改进),它将支持多个目标
在我的项目中,我需要构建一些不同版本的应用程序(细节不同,例如每个应用程序都标有不同的标志)。
假设有大约 10 个“应用程序”目标,我无法想象为每个主要目标添加通知内容和通知服务扩展(在这种情况下,我总共会维护 30 个目标 - 疯狂)。
我在“嵌入应用程序扩展”阶段后运行一个脚本(https://gist.github.com/damian-rzeszot/0b23ad87e5ab5d52aa15c095cbf43c59),它覆盖应用程序扩展 plists 和权利、应用程序版本中的包 ID,更改配置文件并重新签署捆绑。
归档时间: |
|
查看次数: |
10214 次 |
最近记录: |