首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为Mac App Store联合设计框架包?

如何为Mac App Store联合设计框架包?
EN

Stack Overflow用户
提问于 2011-10-08 22:37:55
回答 4查看 38.1K关注 0票数 81

在最近的一次提交之后,我得到了以下错误:

苹果无效签名-嵌套应用捆绑包(FooBar.app/Contents/Frameworks/GData.framework)未签名、签名无效或未使用

提交证书签名。有关更多信息,请参阅代码签名和应用程序沙箱指南。

签名无效-嵌套应用捆绑包(FooBar.app/Contents/Frameworks/Growl.framework)未签名、签名无效或未使用苹果提交证书签名。有关更多信息,请参阅代码签名和应用程序沙箱指南。

签名无效-嵌套应用包libcurl (FooBar.app/Contents/Frameworks/libcurl.framework)未签名、签名无效或未使用苹果提交证书签名。有关更多信息,请参阅代码签名和应用程序沙箱指南。

所以我签署了每个Technote 2206的所有框架包

代码语言:javascript
运行
复制
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./libcurl.framework/Versions/A/libcurl
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./libcurl.framework/Versions/A/libssh2.1.dylib
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./Growl.framework/Versions/A/Growl
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./GData.framework/Versions/A/GData

Technote 2206说:

签名框架

由于框架是捆绑包,因此得出可以直接对框架进行签名的结论似乎是合乎逻辑的。然而,事实并非如此。为避免在对框架进行签名时出现问题,请确保您签署的是特定版本而不是整个框架:这是错误的方式: codesign -s my- signing -identity ../FooBarBaz.framework这是正确的方式: codesign -s my-signing-identity ../FooBarBaz.framework/Versions/A

当我尝试验证结果时,它看起来很好:

代码语言:javascript
运行
复制
% codesign -vvv FooBar.app/Contents/Frameworks/libcurl.framework
FooBar.app/Contents/Frameworks/libcurl.framework: valid on disk
FooBar.app/Contents/Frameworks/libcurl.framework: satisfies its Designated Requirement
% codesign -vvv FooBar.app/Contents/Frameworks/Growl.framework
FooBar.app/Contents/Frameworks/Growl.framework: valid on disk
FooBar.app/Contents/Frameworks/Growl.framework: satisfies its Designated Requirement

为了好玩,我确实尝试了直接签署框架包,但它仍然被拒绝。但这正是文档所说的不能做的事情。

你能猜出为什么这会被认为是无效的吗?我使用的是我用来对我的应用程序进行代码签名的同一个证书--过去一直有效的那个。

我唯一的猜测是与现有的Info.plists有关(我需要拥有框架的plist中的标识符吗?)或者权利--有什么建议吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-02 02:01:19

根据baptr的回答,我已经开发了这个shell脚本,它共同设计了我的所有框架和其他二进制资源/辅助可执行文件(当前支持的类型: dylib、bundle和login项):

代码语言:javascript
运行
复制
#!/bin/sh

# WARNING: You may have to run Clean in Xcode after changing CODE_SIGN_IDENTITY! 

# Verify that $CODE_SIGN_IDENTITY is set
if [ -z "${CODE_SIGN_IDENTITY}" ] ; then
    echo "CODE_SIGN_IDENTITY needs to be set for framework code-signing!"

    if [ "${CONFIGURATION}" = "Release" ] ; then
        exit 1
    else
        # Code-signing is optional for non-release builds.
        exit 0
    fi
fi

if [ -z "${CODE_SIGN_ENTITLEMENTS}" ] ; then
    echo "CODE_SIGN_ENTITLEMENTS needs to be set for framework code-signing!"

    if [ "${CONFIGURATION}" = "Release" ] ; then
        exit 1
    else
        # Code-signing is optional for non-release builds.
        exit 0
    fi
fi

ITEMS=""

FRAMEWORKS_DIR="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
if [ -d "$FRAMEWORKS_DIR" ] ; then
    FRAMEWORKS=$(find "${FRAMEWORKS_DIR}" -depth -type d -name "*.framework" -or -name "*.dylib" -or -name "*.bundle" | sed -e "s/\(.*framework\)/\1\/Versions\/A\//")
    RESULT=$?
    if [[ $RESULT != 0 ]] ; then
        exit 1
    fi

    ITEMS="${FRAMEWORKS}"
fi

LOGINITEMS_DIR="${TARGET_BUILD_DIR}/${CONTENTS_FOLDER_PATH}/Library/LoginItems/"
if [ -d "$LOGINITEMS_DIR" ] ; then
    LOGINITEMS=$(find "${LOGINITEMS_DIR}" -depth -type d -name "*.app")
    RESULT=$?
    if [[ $RESULT != 0 ]] ; then
        exit 1
    fi

    ITEMS="${ITEMS}"$'\n'"${LOGINITEMS}"
fi

# Prefer the expanded name, if available.
CODE_SIGN_IDENTITY_FOR_ITEMS="${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
if [ "${CODE_SIGN_IDENTITY_FOR_ITEMS}" = "" ] ; then
    # Fall back to old behavior.
    CODE_SIGN_IDENTITY_FOR_ITEMS="${CODE_SIGN_IDENTITY}"
fi

echo "Identity:"
echo "${CODE_SIGN_IDENTITY_FOR_ITEMS}"

echo "Entitlements:"
echo "${CODE_SIGN_ENTITLEMENTS}"

echo "Found:"
echo "${ITEMS}"

# Change the Internal Field Separator (IFS) so that spaces in paths will not cause problems below.
SAVED_IFS=$IFS
IFS=$(echo -en "\n\b")

# Loop through all items.
for ITEM in $ITEMS;
do
    echo "Signing '${ITEM}'"
    codesign --force --verbose --sign "${CODE_SIGN_IDENTITY_FOR_ITEMS}" --entitlements "${CODE_SIGN_ENTITLEMENTS}" "${ITEM}"
    RESULT=$?
    if [[ $RESULT != 0 ]] ; then
        echo "Failed to sign '${ITEM}'."
        IFS=$SAVED_IFS
        exit 1
    fi
done

# Restore $IFS.
IFS=$SAVED_IFS

  1. 将其保存到项目中的文件。我将副本保存在项目根目录下的Scripts子目录中。名为codesign-frameworks.sh.

  • 矿山

  1. 在“复制嵌入式框架”构建阶段之后添加“运行脚本”构建阶段。你可以称之为“Codesign Embedded Frameworks”.

  1. ./codesign-frameworks.sh (或上面对脚本的任何名称)粘贴到脚本编辑器文本字段中。如果您将脚本存储在应用程序的subdirectory.
  2. Build中,请使用./Scripts/codesign-frameworks.sh。所有捆绑的框架都将共同设计。

你应该仍然得到一个“Identity: an (matches:…”错误,请在下面发表评论。这种情况不应该再发生了。

更新2012-11-14:向“codesign-frameworks.sh”添加对名称中包含特殊字符(不包括单引号)的框架的支持。

更新2013-01-30:向“codesign-frameworks.sh”添加对所有路径中特殊字符的支持(这应该包括单引号)。

2013-10-29更新:添加实验性的dylib支持。

更新2013-11-28:添加授权支持。改进实验中的dylib支持。

更新2014-06-13:修复包含(嵌套)框架的框架的代码设计问题。这是通过向find添加-depth选项来实现的,这会导致find执行深度优先遍历。因为有了the issue described here,这就变得必要了。简而言之:只有当包含包的嵌套包已经签名时,才能对其进行签名。

更新2014-06-28:新增实验性捆绑支持。

更新2014-08-22:改进代码并防止恢复IFS失败。

更新2014-09-26:添加对登录项目的支持。

2014-10-26更新:引用目录检查。这修复了包含特殊字符的路径的“第31/42行:参数太多”错误和由此产生的“代码对象根本不带符号”错误。

更新2014-11-07:解决身份不明确错误(如“Mac Developer: ambiguous…”)在Xcode中使用自动身份解析时。您不必再显式设置身份,只需使用“Mac Developer”即可!

更新2015-08-07:改进语义。

欢迎改进!

票数 48
EN

Stack Overflow用户

发布于 2011-12-02 15:47:11

您的注释显示您对捆绑包的版本目录中的对象进行了签名。Technote显示了对目录本身进行签名。

以下内容与Technote更匹配:

代码语言:javascript
运行
复制
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./libcurl.framework/Versions/A
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./Growl.framework/Versions/A
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./GData.framework/Versions/A
票数 11
EN

Stack Overflow用户

发布于 2015-09-11 20:20:37

这就是我修复它的方法;

  • 进入目标

的构建设置

  • 找到行"Other Code Signing Flags"
  • Enter --deep value to the release parameter
  • Close Xcode
  • 进入Mac上的派生数据文件夹并删除旧的派生数据(默认路径为: /Users/YOUR_USER_NAME/Library/Developer/Xcode/DerivedData)
  • Open Xcode Xcode build

F215

在构建存档之后,再次提交应用程序...

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7697508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档