iOS应用的版本/构建字段包括:
"Version" CFBundleShortVersionString(String - iOS,OS X)指定捆绑包的发布版本号,该版本号标识应用程序的已发布迭代.发行版本号是由三个以句点分隔的整数组成的字符串.
"Build" CFBundleVersion(String - iOS,OS X)指定捆绑包的构建版本号,该版本号标识捆绑包的迭代(已发布或未发布).构建版本号应该是由三个非负的,周期分隔的整数组成的字符串,第一个整数大于零.该字符串应仅包含数字(0-9)和句点(.)字符.前导零从每个整数中截断,将被忽略(即1.02.3相当于1.2.3).此密钥不可本地化.
"iTunes Connect版本号":在iTunes Connect上创建应用程序的新版本时指定的版本号.
我的问题是:
当新版本的应用程序上传到iTunes Connect和/或发布到App Store时,需要增加哪些版本/内部版本号?
应用更新之间的"版本" CFBundleShortVersionString
或"构建"可以CFBundleVersion
保持不变吗?
Apple来源的额外积分或iTunesConnect在上传无效版本/内部版本号时显示的确切错误消息.
促使这个问题的讨论是,在谷歌Android应用的大众"版本" Play商店并没有需要递增,是没有办法验证.该android:versionName
可不同版本之间保持不变,升级,降级,或者是任何随机字符串,而不是东西,似乎是一个有效的"版本号".
android:versionName
- 表示应用程序代码的发行版本的字符串值,因为它应显示给用户.该值是一个字符串,以便您可以将应用程序版本描述为
<major>.<minor>.<point>
字符串,或任何其他类型的绝对或相对版本标识符.
Android中versionName和versionNumber之间的区别
而android:versionCode
强制执行是一个递增的释放整数.
正如新接受的回答中所述,Apple最近发布了一份技术说明,详细说明了他们的版本和内部版本号:
最近提交后,我收到以下错误:
签名无效 - 嵌套的应用程序包(FooBar.app/Contents/Frameworks/GData.framework)未签名,签名无效,或者未使用Apple提交证书签名.有关更多信息,请参阅"代码签名和应用程序沙盒指南".
签名无效 - 嵌套的应用程序包(FooBar.app/Contents/Frameworks/Growl.framework)未签名,签名无效,或者未使用Apple提交证书签名.有关更多信息,请参阅"代码签名和应用程序沙盒指南".
签名无效 - 嵌套的应用程序包libcurl(FooBar.app/Contents/Frameworks/libcurl.framework)未签名,签名无效,或者未使用Apple提交证书签名.有关更多信息,请参阅"代码签名和应用程序沙盒指南".
所以我根据Technote 2206签署了所有框架包:
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
Run Code Online (Sandbox Code Playgroud)
Technote 2206说:
签署框架
看到框架是捆绑包,看起来你可以直接签署框架似乎是合乎逻辑的.然而,这种情况并非如此.为了避免在签署框架时出现问题,请确保签署特定版本而不是整个框架:
#这是错误的方法:
codesign -s my-signing-identity ../FooBarBaz.framework
#这是正确的方法:
codesign -s my-signing-identity ../FooBarBaz.framework/Versions/A
当我尝试验证结果时,它对我来说很好看:
% codesign -vvv FooBar.app/Contents/Frameworks/libcurl.framework
FooBar.app/Contents/Frameworks/libcurl.framework: valid on …
Run Code Online (Sandbox Code Playgroud) 我有一个OS X应用程序,它通过Mac App Store分发,最近更新到Xcode 4.6.3.
当我现在运行常规构建时,我会收到:
Command /usr/bin/codesign failed with exit code 1:
/Users/Craig/Library/Developer/Xcode/DerivedData/Mac-dxcgahgplwpbjedqnembegifbowj/Build/Products/Debug/MyApp.app: code object is not signed at all
In subcomponent: /Users/Craig/Library/Developer/Xcode/DerivedData/Mac-dxcgahgplwpbjedqnembegifbowj/Build/Products/Debug/MyApp.app/Contents/Frameworks/DropboxOSX.framework
Command /usr/bin/codesign failed with exit code 1
Run Code Online (Sandbox Code Playgroud)
我似乎无法辨别我的项目中的任何其他更改,因此我无法判断它是否与4.6.3更新或其他相关的问题.
我尝试重新启动Xcode,运行干净的构建,并清理构建文件夹.
几天前我安装了Xcode 5.今天我正在尝试提交一个应用程序,但在验证过程中我遇到了这个问题:"网络连接丢失".我从未遇到过Xcode 4的任何问题.
我的网络没问题,我没有使用任何代理.
是什么导致了这个问题?
我的应用程序的新版本是1.2.但在iTunes Connect的"销售与趋势"中,我看到了"未知"应用版本.此新评论未在App Store的"当前版本"选项卡中显示(仅在所有版本选项卡中).怎么了?
Mac Developer
和3rd Party Mac Developer Application
配置文件有Code Signing Identity
什么区别?哪一个用于Mac App Store分发?
我正在尝试以编程方式在自定义Mac应用程序中打开Mac App Store.我从下面的链接开始.
http://itunes.apple.com/us/app/angry-birds/id403961173?mt=12
Run Code Online (Sandbox Code Playgroud)
我尝试了以下代码,但它打开浏览器而不是Mac App Store.
[[NSWorkspace sharedWorkspace] openURL:
[NSURL URLWithString:@"http://itunes.apple.com/us/app/angry-birds/id403961173?mt=12"]];
Run Code Online (Sandbox Code Playgroud)
有关如何做到这一点的任何建议?
由于Mac上尚未提供AdMob或iAd,我们如何向Mac Apps添加广告?是否允许Adsense?或者还有其他可用的广告平台吗?谢谢.
TestFlight是iOS的一个受欢迎的变化.它使得分发beta版本对于开发人员和测试人员来说都是无痛的.
Apple也支持TestFlight for Mac OS吗?我已经做了很多搜索,并没有找到任何结论的方式或另一种.
我们有一个OS X应用程序商店应用程序,结果证明Yosemite存在安装问题.我们未能对Yosemite进行首次安装测试,所以我们错过了这个问题.
我开发了一个修复程序,很想让一些新用户试一试.当前用户删除整个"容器"目录并终止首选项过程以模拟全新安装,这很复杂,困难且具有破坏性.
我也不喜欢分发我们的应用程序的解锁版本的想法.如果出现这种情况,可能会损害应用商店应用的销售额.
我已经完成了诸如为测试应用程序添加了过期日期(弱保护)或创建的开发人员ID构建,这些构建仅在特定MAC地址列表的计算机上运行.最后一种方法有效,但维护起来既乏味又痛苦,并要求测试人员放弃有关其机器的唯一可识别信息.
我非常希望能够创建仅在Beta测试人员的计算机上运行的应用程序,就像TestFlight对iOS一样.
这是一个开发人员问题而不是代码问题.它不适合SO,但我想不出更好的Stack Exchange网站发布它.如果有人建议更好的网站发布问题,我很乐意将其移到那里.
假设我有一个名为A的应用程序.
捆绑标识符在所有Mac和iOS应用程序中必须是唯一的.这意味着如果我在iOS App Store上有应用程序A和Bundle ID com.mycompany.a
,我就无法在Mac App Store上使用相同的Bundle ID创建应用程序com.mycompany.a
.
好吧,说,区分Bundle ID的最佳方法是什么?
我能想到的一些例子:
com.mycompany.a_ios
, com.mycompany.a_mac
com.mycompany.ios.a
, com.mycompany.mac.a
有没有其他想到的?你用过哪个?
mac-app-store ×10
macos ×6
app-store ×4
xcode ×4
ios ×3
ads ×1
cocoa ×1
code-signing ×1
codesign ×1
dropbox ×1
objective-c ×1
submit ×1