Mac 和 iOS App Store 的更新机制有些繁琐,且与应用程序本身脱节。用户往往注意不到应用程序的新版本发布,即使注意到,App Store 的“下载全部”选项也意味着用户经常看不到自己每个应用程序的新版本发布说明。
虽然不允许在应用程序内部更新 App Store 应用,但没有理由应用程序不能通知用户新版本已准备好,并将他们直接引导到 App Store 下载更新。
如果你的应用程序不在 App Store 上,要么是因为它是内部/企业级 iOS 应用,要么是因为它是一个销往商店外部的客户的技术可交付的 Mac 应用,那么你无论如何都不能使用 App Store 的更新机制。
iVersion 是一个简单、零配置的类,允许 iPhone 和 Mac App Store 应用自动检查更新并通知用户新功能。
iVersion 会自动检测应用程序在 App Store 上发布的新版本,并使用一个有用的警报通知用户,其中包含直接链接应用程序下载页面的链接。
或者如果你的应用程序不在商店中,iVersion 允许你指定一个远程 Plist 文件来检查新版本,以及用户可以获取最新版本的下载 URL。
iVersion 的另一个功能是在用户下载新版本后首次运行应用程序时通知用户有关重要新功能。
注:'支持的' 表示库已与该版本进行了测试。'兼容的' 表示库应在该 OS 版本上运行(即它不依赖于任何不可用的 SDK 功能),但由于不再测试兼容性,可能需要调整或修复错误才能正确运行。
从版本 1.10 开始,iVersion 需要 ARC。如果您希望在非 ARC 项目中使用 iVersion,只需将 -fobjc-arc 编译器标志添加到 iVersion.m 类中。为此,请前往目标设置中的构建阶段选项卡,打开编译源组,在列表中双击 iVersion.m,在弹出窗口中输入 -fobjc-arc。
如果您希望将整个项目转换为ARC,请先在iVersion.m中注释掉#error行,然后在Xcode中运行“编辑 > 重构 > 转换为Objective-C ARC...”工具,并确保您想使用ARC的所有文件都已勾选(包括iVersion.m)。
iVersion内部使用多线程以避免阻塞UI,但iVersion的所有外部接口都不是线程安全的,您只能在主线程中调用iVersion的任何方法或设置任何属性。
要将iVersion安装到您的应用程序中,将iVersion.h、.m和.bundle文件拖入项目。如果您不感兴趣本地化版本,可以省略.bundle。如果您使用的是IVERSION_USE_STOREKIT选项(仅限iOS),则需要添加StoreKit框架。
iVersion通常不需要任何配置,它将自动运行,并使用应用程序的包标识符在App Store中进行查找。
注意:如果您已有在Mac和iOS App Store上都具有相同包标识符的应用程序(即使它们的标记不同),查找机制将不起作用,您需要设置appStoreID属性,该属性是一个数字标识符,您可以在设置应用程序后在iTunes Connect中找到。这仅适用于App Store应用程序。
或者(或附加),您可以指定一个可选的远程托管Plist文件,用于发布说明而不是iTunes上的那些。即使您的应用程序已在商店中,提供自己的发布说明Plist文件也有一些优点
您可以为多个版本提供发布说明,如果用户跳过了某个版本,他们将看到他们错过所有更新的发布说明。
您可以提供更简洁的发布说明,适合在iPhone屏幕上显示。
您可以通过不包括最新发布的条目来推迟iVersion更新提醒,直到应用程序上线后。
如果您想自定义iVersion,最佳时间是使用完应用程序之后。最简单的方法是将iVersion配置代码添加到AppDelegate的initialize
方法中,如下所示
+ (void)initialize
{
//example configuration
[iVersion sharedInstance].appStoreID = 355313284;
[iVersion sharedInstance].remoteVersionsPlistURL = @"http://example.com/versions.plist";
}
您指定的Plist文件需要在某个公共 facing Web服务器上进行托管。您可以选择在应用程序中添加一个包含当前版本发布说明的Plist文件,并使用localVersionsPlistPath
属性指定其路径。
这两个Plist的格式如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>1.0</key>
<string>First release</string>
<key>1.1</key>
<string>NEW: Added new snoodlebar feature
FIX: Fixed the bugalloo glitch</string>
...
</dict>
</plist>
Plist的根节点是一个包含一个或多个项的字典。每个项表示您应用程序的特定版本。
每个值的键必须是一个由正整数组成的数值版本号,由小数点分隔。这些应与您为iVersion的应用程序Version属性设置的值匹配,iVersion默认设置为您的应用程序info.plist中的Bundle Version(CFBundleShortVersionString或CFBundleVersion)键。
每个值应该是多行字符串或字符串数组,每个值代表发布说明中的一个单独的项目。没有关于每个发布说明格式的限制 - 上面示例中的方法只是建议。您也可以省略发布说明而只有一个空的.
不建议包含应用程序的每个版本在发布说明中。在实践中,如果用户很少更新,以至于他们错过了三个或更多的连续版本,您可能仍然只想向他们展示最后的几个版本的说明,因此,在您更新时从文件中删除较旧版本。
不要认为发行说明必须与iTunes或Mac App Store中的发行说明完全一致。模态警报中空间有限,用户在每次启动您的应用程序时也不愿阅读大量文本,因此可能最好只在您的versions.plist中列出关键的新功能。
本地和远程发行说明plist不必相同。虽然从维护角度来看使它们相同可能是方便的,但如果本地版本的语言略有不同,效果更好。例如,远程发行说明可能为
Version 1.1
- Fixed crashing bug
- Added shiny new menu graphics
- New sound settings
而本地版本可能为
Check out the new sound options in the settings panel. You can access the settings from the home screen
提及错误修复或新图形是没有意义的,因为用户只需通过使用应用程序就可以轻松查看这些内容。另一方面,他们可能不会注意到新的声音选项,也不知道如何找到它们。
也不必总是包含本地发行说明文件。如果新版本中没有需要引起注意的功能,只需省略该文件即可——它不会阻止您添加远程版本文件以提示用户升级,也不会阻止在未来版本中的本地发行说明正常工作。
为了配置iVersion,有几个可以在iVersion类中改变其行为和外观的属性。这些属性大多数应该是自我解释的,但它们在下面有文档说明。
@property (nonatomic, assign) NSUInteger appStoreID;
这应该与您的应用程序的iTunes应用ID相匹配,您可以在设置应用程序后在iTunes连接中获取该ID。这个值通常是不必要的,通常只有在您的Mac和iOS应用程序的捆绑ID之间存在上述冲突时才需要。这个功能也仅用于远程版本更新,因此如果您不打算使用该功能,则可以忽略这个设置。
@property (nonatomic, copy) NSString *remoteVersionsPlistURL;
这是iVersion将用于检查发行说明的远程托管plist的URL。您可以在新版本被苹果批准并在商店中显示之前安全地更新此文件。如果您只想使用iTunes的发行说明,请将该值设置为nil。不要将其设置为无效的URL,如图所示http://example.com,因为当每次应用程序启动时应用程序尝试检查该无效URL时,这将浪费电池、CPU和带宽。如果您在plist中不包括特定的版本,iVersion不会为该版本显示更新警报,即使它在App Store中检测到新版本,除非您将useAppStoreDetailsIfNoPlistEntryFound
选项设置为YES。
@property (nonatomic, copy) NSString *localVersionsPlistPath;
这是您的本地发行说明plist的文件名,用于在用户首次启动新的更新时告诉他们关于新功能的信息。如果您不希望您的应用程序显示当前版本的发行说明,请将该值设置为nil。
@property (nonatomic, copy) NSString *applicationVersion;
应用程序的当前版本号。这会自动从info.plist中的CFBundleShortVersionString(如果有)或CFBundleVersion字符串中设置,除非您知道自己在做什么,否则最好不要更改它。请注意,iTunes和远程版本plist中的版本号将与这个值进行比较,而不是info.plist中的那个值。
@property (nonatomic, copy) NSString *applicationBundleID;
这是应用程序的捆绑ID,用于从iTunes检索最新版本和发行说明。这会自动从应用程序的info.plist中设置,所以除非是为了测试目的,否则您通常不需要更改它。
@property (nonatomic, copy) NSString *appStoreCountry;
这是用于指定要检查哪个iTunes商店的两字母国家代码。它会根据设备的区域设置自动设置,因此大多数情况下不需要修改。您可以覆盖它,使其指向美国商店或其他特定商店,如果您的应用仅在某些国家可用,这可能是个好主意,但请注意,这将影响发布说明的显示语言。
@property (nonatomic, assign) BOOL showOnFirstLaunch;
指定是否在用户第一次启动应用时显示当前版本的发布说明。如果设置为否,则意味着例如下载了您的1.1版本但从未安装过旧版本的用户将不会看到1.1版本的新功能。
@property (nonatomic, assign) BOOL groupNotesByVersion;
如果您发布的说明文件包含多个版本,此选项将按版本号对用户显示的警告中的发布说明进行分组。如果设置为否,则发布说明将以单个列表的形式显示。默认值为否。
@property (nonatomic, assign) float checkPeriod;
设置应用检查新版本频率的时间间隔。以天为单位计算,但可以设置为分数值,例如0.5表示半天。将此设置为更高的值可避免您的服务器访问量过大。零表示每次启动时都会检查新版本。从iVersion 1.8版本开始,默认值为零。
@property (nonatomic, assign) float remindPeriod;
应用在用户选择“稍后提醒”选项后应等待多长时间才提醒用户有新版本。值为零表示应用将在每次启动时提醒用户。请注意,此值优先于检查周期,因此一旦设置提醒,应用将在提醒周期内不检查新版本,即使在此期间发布新版本也是如此。默认的提醒周期为一天。
@property (nonatomic, copy) NSString *inThisVersionTitle;
显示当前版本(即在本地版本s plist文件中)中的功能标题。
@property (nonatomic, copy) NSString *updateAvailableTitle;
当iVersion检测到远程版本的plist中出现新的应用版本时显示的标题。如果不将groupNotesByVersion
设置为否,最新版本号将自动附加到此标题的括号中。
@property (nonatomic, copy) NSString *versionLabelFormat;
发布说明版本分隔符的格式字符串。应包含一个%@占位符,用于版本号,例如“版本%@”。此标签仅在将groupNotesByVersion
设置为是时使用。
@property (nonatomic, copy) NSString *okButtonLabel;
用于关闭“新版本中包含”模态的按钮标签。
@property (nonatomic, copy) NSString *ignoreButtonLabel;
当用户不想下载新更新时按下的按钮标签。
@property (nonatomic, copy) NSString *remindButtonLabel;
当用户不想立即下载新更新,但希望将来得到提醒时按下的按钮标签。如果不想显示提醒按钮(例如,如果您屏幕上没有空间),请将其设置为@""
。
@property (nonatomic, copy) NSString *downloadButtonLabel;
用户想要下载新更新时按下的按钮标签。
@property (nonatomic, assign) iVersionUpdatePriority updatePriority;
这是一种简单的方法来隐藏忽略/提醒按钮,如果您想优先考虑更新。有三个优先级:iVersionUpdatePriorityLow
是默认值,显示下载、提醒和忽略按钮;iVersionUpdatePriorityMedium
隐藏忽略按钮;iVersionUpdatePriorityHigh
隐藏提醒和忽略按钮,强制用户立即下载更新。
@property (nonatomic, assign) BOOL useAllAvailableLanguages;
默认情况下,iVersion将使用iVersion.bundle中所有可用的语言,即使在一个不支持本地化的应用中使用。如果您希望iVersion仅使用应用程序已支持的同一组语言,请将此属性设置为否(默认值为是)。
@property (nonatomic, assign) BOOL disableAlertViewResizing;
在iPhone上,iVersion包含一些逻辑来调整警告视图的大小,以确保在横屏模式下不会截断您的发布说明消息。执行此操作的代码是一个相当糟糕的快速解决方法,因此如果您的警告文本非常短或您的iPhone应用仅在横屏模式下需要功能,您可能希望将此属性设置为是,这可能有助于使您的应用对未来iOS更新的鲁棒性更强。尝试修改禁用示例,以演示此效果。
@property (nonatomic, assign) BOOL onlyPromptIfMainWindowIsAvailable;
此设置仅适用于Mac OS。默认情况下,在Mac OS上,iVersion警报以标签形式显示在主窗口上。某些应用程序没有主窗口,因此这种方法不起作用。对于此类应用程序,将此属性设置为NO以允许iVersion警报以常规模态窗口的形式显示。
@property (nonatomic, assign) BOOL useAppStoreDetailsIfNoPlistEntryFound;
如果您正在使用远程plist选项,默认情况下,即使检测到应用商店中有新版本,iVersion也只会显示更新警报,只要在该plist中找到发布说明条目。这允许您延迟宣布更新,或通过逐一省略plist中的版本来阻止宣布的小版本更新。如果希望当找不到plist条目时,iVersion使用应用商店的发布说明,请将此选项设置为YES(默认为NO)。
@property (nonatomic, assign) BOOL checkAtLaunch;
将此设置为NO以禁用在应用程序启动或从后台返回时自动检查本地和远程发布说明。禁用此选项不会阻止您通过分别调用checkIfNewVersion
和checkForNewVersion
来手动触发检查。
@property (nonatomic, assign) BOOL verboseLogging;
此选项将使iVersion向控制台发送有关版本检查过程的详细日志。如果您的应用程序不能正确检测到新发布,这有助于您找出原因。详细的日志记录默认在调试构建中启用,在发布和部署构建中禁用。
@property (nonatomic, assign) BOOL previewMode;
如果设置为YES,iVersion将始终显示本地和远程版本plist的内容,不受当前构建的版本号的影响。在测试期间,请使用此功能校对发布说明,但在最终发布时应禁用。
@property (nonatomic, assign) BOOL useUIAlertControllerIfAvailable;
默认情况下,iVersion将使用UIAlertView在iOS上显示评分提示。UIAlertView已在iOS8中弃用,并由UIAlertController取代。遗憾的是,与UIAlertView不同,使用UIAlertController显示警报会干扰应用程序显示其他控制器的能力,并且由于iVersion可以在应用程序生命周期的任何时刻显示警报,因此可能与尝试显示另一个视图控制器的应用程序冲突。因此,默认禁用UIAlertController。只有当您确定它不会与您的应用程序逻辑冲突时(例如,如果您已禁用自动版本提示或您的应用程序未使用任何模态视图控制器),才将此属性设置为YES。
如果默认的iVersion行为不符合您的需求,您可以通过使用高级属性、方法和代理来实现自己的功能。下面的属性允许您访问内部状态并覆盖它
@property (nonatomic, strong) NSURL *updateURL;
当检测到更新并且用户选择下载时,应用程序将引导用户访问的URL。对于在内部使用或未通过应用商店分发的应用程序,您需要覆盖此设置。如果您为常规应用商店应用程序实现自己的下载按钮,应使用openAppPageInAppStore方法而不是打开此URL,尤其是在Mac OS上,因为打开Mac App Store的过程比仅仅打开URL要复杂。
@property (nonatomic, copy) NSString *ignoredVersion;
用户忽略的最后一个应用程序版本的版本字符串。如果用户未忽略任何发布,则此值为nil。将此设置为nil以清除忽略的版本。
@property (nonatomic, strong) NSDate *lastChecked;
iVersion检查更新的最后日期。您可以使用此功能与checkPeriod结合来确定应用程序是否应该再次检查。
@property (nonatomic, strong) NSDate *lastReminded;
用户被提醒新版本的最后日期。您可以使用此功能与remindPeriod结合来确定应用程序是否应该再次检查。将此设置为nil以清除提醒延迟。
@property (nonatomic, assign) BOOL viewedVersionDetails;
表示本地版本详细信息是否已查看(YES)或未查看(NO)的标志。
@property (nonatomic, assign) id<iVersionDelegate> delegate;
一种实现了以下文档中所述的 iVersionDelegate 协议的您提供的对象。使用此对象来检测和/或覆盖 iVersion 的默认行为。默认为 App Delegate,因此如果您正在使用您的 App Delegate 作为 iVersion 代理,则不需要设置此属性。
- (void)openAppPageInAppStore;
此方法将根据所运行的平台和 OS 版本在 Mac 或 iPhone App Store 中打开应用页面,或直接在应用中打开。在许多情况下,启动应用商店的过程比仅仅打开 URL 复杂得多,因此应使用此方法而不是 updateURL 属性。注意,此方法依赖于 appStoreID
,该值只有在轮询 iTunes 服务器后才检索到,如果该属性尚未设置,则将返回 NO。如果您打算在先执行更新检查后调用此方法,您需要提前自己设置 appStoreID
属性。
- (void)checkIfNewVersion;
此方法将检查本地版本的 Plist 文件以查看是否有新的注释要显示,并将它们显示在警报中。如果将 checkAtLaunch
设置为 YES,则在启动时自动调用此方法。
- (NSString *)versionDetails;
此方法返回当前版本的本地发布说明,或自上次应用启动以来已发布的任何版本,具体取决于在本地版本 plist 文件中包含了多少版本。如果这不是应用此版本的第一次启动,则只包含最新版本。
- (BOOL)shouldCheckForNewVersion;
此方法检查是否已满足检查新版本的准则。如果您已禁用应用启动时的自动显示,则可以使用此方法来确定是否检查版本更新。
- (void)checkForNewVersion;
此方法将触发对新版本的新检查,忽略 checkPeriod 和 remindPeriod 属性。如果将 checkAtLaunch
设置为 YES 并且 shouldCheckForNewVersion
返回 YES 时,则在启动时和当应用从后台返回时自动调用此方法。
iVersionDelegate 协议提供以下方法,可用于截获 iVersion 事件并覆盖默认行为。所有方法都是可选的。
- (BOOL)iVersionShouldCheckForNewVersion;
如果在满足所有检查准则之后,即将进行新的版本检查时将会调用此方法。如果返回 NO,则不会执行检查。如果您使用 checkForNewVersion 方法手动触发检查,则不会调用此方法。
- (void)iVersionDidNotDetectNewVersion;
如果版本检查未检测到应用的任何新版本,将会调用此方法。
- (void)iVersionVersionCheckDidFailWithError:(NSError *)error;
如果由于网络问题或远程版本 Plist 文件丢失或损坏而版本检查失败,将会调用此方法。
- (void)iVersionDidDetectNewVersion:(NSString *)version details:(NSString *)versionDetails;
如果检测到新版本,将会调用此方法。
- (BOOL)iVersionShouldDisplayNewVersion:(NSString *)version details:(NSString *)versionDetails;
在即将显示新(远程)版本详情警报之前立即调用此方法。返回 NO 以阻止显示警报。请注意,如果您正在自行实现警报,您还需要根据用户响应自行设置 lastChecked
、lastReminded
和 ignoredVersion
属性。
- (BOOL)iVersionShouldDisplayCurrentVersionDetails:(NSString *)versionDetails;
在即将显示当前(本地)版本详情警报之前立即调用此方法。返回 NO 以阻止显示警报。请注意,如果您打算自行实现此通知,您还需要手动设置 viewedVersionDetails 标志。
- (void)iVersionUserDidAttemptToDownloadUpdate:(NSString *)version;
当用户在版本更新警告中点击下载按钮时,会调用此函数。如果您想记录用户与iVersion的交互,这将很有用。这种方法仅在您使用标准iVersion警告视图时才会调用,如果您提供了自定义警告实现或直接调用 openAppPageInAppStore
方法,则不会自动调用。
- (void)iVersionUserDidRequestReminderForUpdate:(NSString *)version;
当用户请求提醒新版本时,会调用此函数。如果您想记录用户与iVersion的交互,这将很有用。这种方法仅在您使用标准iVersion警告视图时才会调用,如果您提供了自定义警告实现,则不会自动调用。
- (void)iVersionUserDidIgnoreUpdate:(NSString *)version;
当用户在新版本警告中点击忽略时,会调用此函数。如果您想记录用户与iVersion的交互,这将很有用。这种方法仅在您使用标准iVersion警告视图时才会调用,如果您提供了自定义警告实现,则不会自动调用。
- (BOOL)iVersionShouldOpenAppStore;
当iVersion尝试通过URL或使用StoreKit应用程序界面控制器打开App Store之前,会立即调用此方法。如果您想实现自己的更新页面逻辑,则应返回NO。
- (void)iVersionDidPresentStoreKitModal;
当iVersion展示StoreKit应用程序界面控制器之后,会调用此方法。如果需要暂停您的应用中的某些功能等,将很有用。
- (void)iVersionDidDismissStoreKitModal;
当用户关闭StoreKit应用程序界面控制器时,会调用此方法。如果要在模态弹窗显示时暂停任何功能,这将很有用。
默认情况下,iVersion将通过启动App Store应用来打开评分页面。在iOS 6或更高版本中,您可以使用StoreKit框架设置iVersion显示应用页面而不离开应用。要启用此功能,请在您的prefix.pch文件中设置以下宏值
#define IVERSION_USE_STOREKIT 1
或者,作为备选方案,您可以将 IVERSION_USE_STOREKIT=1
添加为预处理宏。请注意以下注意事项和使用Storekit的限制
iVersion无法直接在StoreKit中打开评分页面,只能打开应用详情页面。用户需要在评分之前点击评分标签。
已出现一些孤立案例,苹果拒绝了那些针对StoreKit框架但没有提供内购的App。如果您的应用尚未使用StoreKit,启用iVersion的此功能存在风险。
iVersion的默认字符串已本地化到多种语言。默认情况下,即使您的应用没有本地化或只本地化为iVersion支持语言的一个子集,iVersion也将使用所有在iVersion.bundle中的本地化。
如果您希望iVersion只使用您应用中启用的本地化(例如,如果您的应用只支持英语、法语和西班牙语,则iVersion将自动本地化这些语言,但不为德语本地化,尽管iVersion包含德语文件),将useAllAvailableLanguages
选项设置为NO。
如果可用,iVersion会自动使用您在iTunes上指定的本地化发行说明。
不建议您修改iVersion.bundle中的字符串文件,因为这会使更新到iVersion的新版本变得复杂。例外情况是,如果您希望向github上的iVersion项目提交额外语言或改进或对本地化的改进和更正(这会非常受欢迎)。
如果您想在应用中为iVersion添加额外的语言功能,而无需将其提交回GitHub项目,您可以直接将相关的字符串添加到项目文件夹中相应的Localizable.strings文件。如果您想替换一些或全部默认的iVersion字符串,最简单的方法是将这些字符串复制到自己的Localizable.strings文件,然后进行修改。iVersion将自动优先使用主应用程序包中的字符串,而不是iVersion包中的字符串,因此您可以以这种方式覆盖任何字符串。
如果您不希望使用任何默认本地化,您可以将iVersion.bundle整个省略。注意,如果只想支持iVersion支持的语言子集,不需要从iVersion.bundle中删除其他字符串文件——只需将useAllAvailableLanguages
设置为NO,iVersion将仅使用您的应用已经支持的语言。
仍然支持使用单个setter方法来覆盖iVersion默认字符串的旧方法(如下所示),但现在的推荐做法是将这些字符串添加到项目的Localizable.strings文件,iVersion将自动检测到这些文件。
+ (void)initialize
{
[iVersion sharedInstance].inThisVersionTitle = NSLocalizedString(@"New in this version", @"iVersion local version alert title");
[iVersion sharedInstance].updateAvailableTitle = NSLocalizedString(@"A new version of MyApp is available to download", @"iVersion new version alert title");
[iVersion sharedInstance].versionLabelFormat = NSLocalizedString(@"Version %@", @"iVersion version label format");
[iVersion sharedInstance].okButtonLabel = NSLocalizedString(@"OK", @"iVersion OK button");
[iVersion sharedInstance].ignoreButtonLabel = NSLocalizedString(@"Ignore", @"iVersion ignore button");
[iVersion sharedInstance].remindButtonLabel = NSLocalizedString(@"Remind Me Later", @"iVersion remind button");
[iVersion sharedInstance].downloadButtonLabel = NSLocalizedString(@"Download", @"iVersion download button");
}
如果您使用的是远程版本Plist,并且需要提供本地化发布说明,最简单的方法是对remoteVersionsPlistURL
文件进行本地化处理,并为每种语言提供一个不同的URL,如下所示
+ (void)initialize
{
[iVersion sharedInstance].remoteVersionsPlistURL = NSLocalizedString(@"http://example.com/versions_en.plist", @"remote iVersion plist URL");
}
第一次构建和运行基本的Mac或iPhone示例项目时,它会显示一个警告,说明有新版本可用。这是因为它已下载远程版本的.plist文件,并确定最新版本比当前运行的版本更新。
退出应用,进入iVersion-Info.plist文件并编辑包版本为1.2。现在重新构建应用。
这次它不会再说有新版本可用。实际上,您已经模拟了升级。取而代之的是,它会向您介绍当前已安装版本的新功能。这是因为它发现当前应用的包版本比上次启动时记录的最后版本更新,并且已经检查了本地versions.plist文件以查找新版本发布说明的条目。
如果您关闭了对话框并退出再重新启动应用,现在应该什么都不会显示。这是因为应用已经检测到包版本自上次启动应用以来没有变化。
要再次显示警告,请从模拟器中删除应用并将包版本重置为1.1。或者,启用previewMode
选项以在启动时强制显示警告。
高级示例展示了您如何完全自定义iVersion界面。自动版本检查已被禁用,用户可以通过按“检查新版本”按钮触发检查。
按下按钮时,应用会显示进度轮转动,并在按钮下方的控制台打印结果。
这是一个为Mac OS设计的示例,但同样也适用于iOS。
版本1.11.5
版本1.11.4
版本1.11.3
版本1.11.2
版本1.11.1
版本1.11
updatePriority
属性,用于配置更新优先级版本1.10.6
版本1.10.5
版本1.10.4
版本1.10.3
版本1.10.2
版本1.10.1
版本1.10
版本1.9.8
版本1.9.7
版本1.9.6
版本1.9.5
版本 1.9.4
版本 1.9.3
版本 1.9.2
版本 1.9.1
版本 1.9
版本 1.8
版本 1.7.3
版本 1.7.2
版本 1.7.1
版本 1.7
版本 1.6.4
版本 1.6.3
版本 1.6.2
版本 1.6.1
版本 1.6
版本1.5
版本1.4
版本1.3
版本1.2
版本1.1
版本1.0