扶手椅 0.3.7

扶手椅 0.3.7

Matt Coneybeare 维护。




扶手椅 0.3.7

Armchair: A simple yet powerful App Review Manager for iOS and OSX in Swift

扶手椅是一个简单但强大的 iOS 和 OS X 应用审查管理器,用 Swift 编写。它基于 UAAppReviewManagerAppirater,但针对希望从中受益应用的新语言进行了全面重写。

为什么选择扶手椅?

平均来说,只有当您的应用出现问题的时候,最终用户才会写评论。这导致评分呈现出不公平的负面偏斜,当大多数满意的客户不留下评论,只有不满意的客户留下评论时。为了平衡负面因素,扶手椅会在开发者知道用户满意之后才提示用户写评论。例如,您可能只在用户使用超过一周,并且至少进行了 5 个重大事件(应用的核心功能)之后显示弹窗。规则可以完全自定义,并且很容易设置。

以下是一些使扶手椅优于其他评分框架和仓库的要点

虽然证明它的测试似乎缺失,但苹果声称 Swift 的速度比 Objective-C 快得多。享受完全用 Swift 编写的框架的好处,并且用熟悉的语法工作,无需处理桥接头或其他 Objective-C 的繁琐问题。

支持iOS和OS X

许多开发者将应用发布到iOS和OS X上。默认情况下,扶手椅支持通过相应应用商店销售的所有iOS和OS X应用。API对于两者都是相同的,除了几个特定于iOS的功能,这些功能在使用中描述。

运行时完全可配置

Armchair是运行时完全可配置的。这意味着您显示的提示可以是动态的,根据最终用户的评分或状态。如何以及何时显示的规则都可以以相同的设置方式设置,让您对审查提示的呈现和时机拥有更大的控制权。

为数十种语言的默认本地化

如果您选择在您的应用程序中使用默认的Armchair字符串,您将获得超过32种语言的本地化的额外好处。否则,定制也很简单,只需包括您自己的字符串文件,并让Armchair知道,就轻松地覆盖本地化字符串。

防止在不同设备上弹出评分提示

如果您的用户在两个不同的设备上安装了相同的应用程序、相同版本,您真的不应该在每个设备上弹出相同的评分提示。Armchair允许您可选地将用户的使用统计数据保存在NSUbiquitousKeyValueStore中,或您想要跟踪的自定义任何存储中,以防止双重提示。

使用UIApplication/NSApplication生命周期通知

Armchair监听ApplicationDidLaunch和ApplicationWillEnterForeground通知。这允许您关注您的应用程序,而不是跟踪应用程序代理函数中的跟踪,因此您需要编写的代码行更少。

简易安装

只需一行代码即可开始使用。Armchair在深层挖掘方面非常强大,但在标准配置下的设置也很简单。

iTunes联盟代码

如果你是iTunes联盟成员,可以轻松配置Armchair使用你的代码和活动。坦白说:如果你不是iTunes联盟成员,应用中使用的默认代码是作者的。有代码总比没有好,所以如果你不打算设置一个,请保留默认设置。把它看作是对创建和开源Armchair的一种小小心意吧。

准备就绪

代码整洁、文档齐全且组织有序。很容易理解逻辑流程和每个函数的目的。它不将逻辑随意混合在类函数和实例函数之间。它的API干净且可预测。


The Golden Rule

  1. 不要做混蛋。

说真的。如果不考虑弹出提示如何打断用户的流畅性,很容易激怒你的客户。这一事件在2014年初被许多知名科技博主广泛讨论,在社区中引起了很大争议。

我们认为,拥有一个应用评论提示是可以的,但只有在正确的时间,并且不要过于频繁地提问。提示智能显示的标准因应用而异,但可以考虑在正面用户工作流程的末尾添加一个,而不是开始。

调整变量,不要让客户感到烦恼,你将享受应用评论提示的最大利益。


屏幕截图

iOS Example Shots Mac Example Shots

需求

  • Xcode 6.1+
  • iOS 8.0+, Mac OS X 10.10+

安装

嵌入式框架需要至少iOS 8或OS X Mavericks(10.9)的部署目标。

由于不再支持框架,因此Armchair不再支持iOS 7。没有框架,针对iOS 7执行Travis-CI将需要第二个重复的测试目标。单独的测试套件需要导入所有Swift文件,测试也需要复制和重写。这种分割将很困难,很难维护以确保Armchair生态系统尽可能高的质量。

CocoaPods

CocoaPods 是 Cocoa 项目的依赖项管理器。您可以使用以下命令安装它:

$ gem install cocoapods

构建 Armchair 需要 CocoaPods 0.39.0+。

要使用 CocoaPods 将 Armchair 集成到您的 Xcode 项目中,请在您的 Podfile 中指定它:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
platform :osx, '10.10'
use_frameworks!

pod 'Armchair', '>= 0.3'

#Add the following in order to automatically set debug flags for armchair in debug builds
post_install do |installer|
      installer.pods_project.targets.each do |target|
          if target.name == 'Armchair'
              target.build_configurations.each do |config|
                  if config.name == 'Debug'
                      config.build_settings['OTHER_SWIFT_FLAGS'] = '-DDebug'
                      else
                      config.build_settings['OTHER_SWIFT_FLAGS'] = ''
                  end
              end
          end
      end
  end

然后,运行以下命令:

$ pod install

Carthage

Carthage 是一个去中心化的依赖项管理器,它可以构建您的依赖项并为您提供二进制框架。

安装 Carthage 后,您可以在您的 Cartfile 中指定它,以将 Armchair 集成到您的 Xcode 项目中:

github "UrbanApps/Armchair"

运行 carthage update 来构建框架并将构建的 Armchair.framework 拖到您的 Xcode 项目中。

使用方法

单行设置

扶手椅包含合理的默认值,同时读取您本地化或非本地化的 info.plist 数据来自动设置。虽然可以进行配置,但仅需要配置的项是您的 App Store ID。此调用适用于 iOS 和Mac 应用,应作为您应用程序代理的 initialize() 函数的一部分进行调用。

Armchair.appID("12345678")

这就是开始的地方。使用此行设置扶手椅将使用一些合理的默认标准(下面详细介绍),并将在不同情况下显示评分提示。

自定义配置

如果您的应用程序使用重要事件来跟踪用户所做的显著行为,可以根据需要在此事件发生的任何位置添加此行,例如 levelDidFinish 函数或 userDidUploadPhoto 函数。

Armchair.userDidSignificantEvent(true)

为了使扶手椅了解此事件,您还需要设置显著事件的阈值。通常,这些以及其他逻辑配置设置应作为应用程序代理的 initialize() 函数的一部分进行设置,以便在应用程序启动时接收通知。

Armchair.significantEventsUntilPrompt(5)

如前所述,appID 是唯一需要配置的项。它用于生成页面链接的 URL。通常,这配置为当前运行的应用程序,但可能存在要配置为另一个应用程序的实例,例如在评审其他应用程序的应用程序中。

// GETTER
Armchair.appID() -> String
// SETTER
Armchair.appID(appID: String)
显示字符串

appName 用于审查提示弹出窗口的多个位置。您可以在此处进行配置,以自定义消息而不丢失任何默认本地化内容。默认情况下,扶手椅将从您的本地化或非本地化 info.plist 中读取值,但您可以将其显式设置。

// GETTER
Armchair.appName() -> String
// SETTER
Armchair.appName(appName: String)

reviewTitle 是用于审查提示弹出窗口的标题。默认值为本地化的“评分 <appName>”,但可以设置为您想要的任何内容。

// GETTER
Armchair.reviewTitle() -> String
// SETTER
Armchair.reviewTitle(reviewTitle: String)

reviewMessage 是用于审查提示弹出窗口的消息。默认值为本地化的“如果您喜欢使用 <appName>,愿意花一分钟时间给它评分吗?这不会花费您很长时间。感谢您的支持!”,但可以指定更改。但是,如果您更改它,则需要提供如下所示的自己的本地化字符串。

// GETTER
Armchair.reviewMessage() -> String
// SETTER
Armchair.reviewMessage(reviewMessage: String)

cancelButtonTitle 是用于“取消”操作的审查提示弹出窗口的按钮标题。其默认值是一个本地化文本“不,谢谢”。

// GETTER
Armchair.cancelButtonTitle() -> String
// SETTER
Armchair.cancelButtonTitle(cancelButtonTitle: String)

rateButtonTitle 是用于“评分”操作的审查提示弹出窗口的按钮标题。其默认值是本地化文本“评分 <应用程序名>”。

// GETTER
Armchair.rateButtonTitle() -> String
// SETTER
Armchair.rateButtonTitle(rateButtonTitle: String)

remindButtonTitle 是用于“提醒”操作的审查提示弹出窗口的按钮标题。其默认值是本地化文本“稍后提醒我”。

// GETTER
Armchair.remindButtonTitle() -> String
// SETTER
Armchair.remindButtonTitle(remindButtonTitle: String)
逻辑

daysUntilPrompt 配置决定了用户需要安装您的应用程序相同版本多少天之后才会收到评分提示。它的默认值是30天。

// GETTER
Armchair.daysUntilPrompt() -> UInt
// SETTER
Armchair.daysUntilPrompt(daysUntilPrompt: UInt)

usesUntilPrompt 配置决定了用户需要使用相同版本的应用程序多少次之后才会被提示评分。它的默认值是20次使用。

// GETTER
Armchair.usesUntilPrompt() -> UInt
// SETTER
Armchair.usesUntilPrompt(usesUntilPrompt: UInt)

“使用”的例子包括用户启动应用程序或将它带到前台。Armchair通过监听UIApplication/NSApplication生命周期通知,内部跟踪这些信息。

如上所述,significantEventsUntilPrompt 配置决定了用户需要多少“重大事件”之后才会被提示评分应用程序。它默认为0个重大事件。

// GETTER
Armchair.significantEventsUntilPrompt() -> UInt
// SETTER
Armchair.significantEventsUntilPrompt(significantEventsUntilPrompt: UInt)

一个重大事件可以是您希望出现在应用程序中的任何事件。在一个电话应用程序中,一个重大事件可能是拨打电话或接听电话。在一个游戏中,它可能是通关或击败.BOSS。这仅是另一层筛选,以确保只有您的最忠实用户被提示在应用商店中评分。如果您将此值保留为0(默认),则不会使用此评分标准。要告诉Armchair用户已执行一个重大事件,请调用函数

Armchair.userDidSignificantEvent(canPromptForRating: Bool)

daysBeforeReminding 配置决定了Armchair在提醒用户再次评分之前将等待多少天,如果他们在第一次提醒时选择“稍后提醒我”。其默认值是1天。值0将移除“稍后提醒我”按钮并禁用此功能。

// GETTER
Armchair.daysBeforeReminding() -> UInt
// SETTER
Armchair.daysBeforeReminding(daysBeforeReminding: UInt)

tracksNewVersions 配置决定了Armchair是否应跟踪检测到的新应用程序版本。默认情况下,Armchair跟踪所有新的捆绑版本。当它检测到新版本时,它会重置保存的使用、重大事件、弹出窗口显示、用户操作等值。通过将此设置为NO,Armchair将仅跟踪它初始化的版本或它最后了解的版本。如果此设置设置为true,Armchair将在每次检测到新版本后重置自己。其默认值是true。

// GETTER
Armchair.tracksNewVersions() -> Bool
// SETTER
Armchair.tracksNewVersions(tracksNewVersions: Bool)

shouldPromptIfRated 配置决定是否向之前评价过应用的用户显示评价提示。此设置类似于 tracksNewVersions 设置,但相对不那么严格。将此设置为 false 将导致新用户收到弹出窗口,但不会询问之前已被询问弹出窗口的用户。如果你发布小型错误修复版本并不想用弹出窗口打扰现有用户,但希望确保新用户会收到评价提示,这很有用。例如,你可以为每个小版本设置为 false,然后在推出主要版本升级时将其保持为 true 以再次请求评价。其默认值是 true

// GETTER
Armchair.shouldPromptIfRated() -> Bool
// SETTER
Armchair.shouldPromptIfRated(shouldPromptIfRated: Bool)

useStoreKitReviewPrompt 配置决定是否尝试显示 SKStoreReviewController 的 requestReview() 提示而不是默认提示。此设置仅在 iOS 版本 >= 10.3 时才起作用。其默认值是 false

// GETTER
Armchair.useStoreKitReviewPrompt() -> Bool
// SETTER
Armchair.useStoreKitReviewPrompt(useStoreKitReviewPrompt: Bool)

useMainAppBundleForLocalizations 配置是告诉 Armchair 您提供自己的评价提示弹出字符串翻译的一种方式。这可能是因为您正在自定义它们,或者您为弹出窗口设置了您自己的文本。如果设置为 true,则主捆绑包将始终用于加载本地化字符串。您必须将翻译包含在名为 ArmchairLocalizable.strings 或标准 Localizable.strings 的文件中。如果设置为 false,Armchair 将在其自己的翻译捆绑包中查找翻译字符串。其默认值是 false

// GETTER
Armchair.useMainAppBundleForLocalizations() -> Bool
// SETTER
Armchair.useMainAppBundleForLocalizations(useMainAppBundleForLocalizations: Bool)
联盟代码

affiliateCode 配置是可选的,用于与评价 URL 配置。如果您是苹果联盟成员,请在此处输入您的代码。如果没有设置,则使用作者代码,因为这比没有设置 anything 更好。如果您想感谢我为 Armchair 所做的工作,请随意保留此默认值。

// GETTER
Armchair.affiliateCode() -> String
// SETTER
Armchair.affiliateCode(affiliateCode: String)

affiliateCampaignCode 配置是可选的,用于配置评价 URL。它为联盟代码提供了上下文,默认为 "Armchair-<appID>"。

// GETTER
Armchair.affiliateCampaignCode() -> String
// SETTER
Armchair.affiliateCampaignCode(affiliateCampaignCode: String)
调试模式

debugEnabled 配置对于测试您的评价提示弹出窗口的外观和测试非常有用。将其设置为 true将通过让应用程序认为已满足提示条件来每次显示 Armchair 弹出窗口。在编译标志未定义时调用此函数(在发布构建中)没有任何作用。在 App Store 构建,您不必担心意外留下调试开启。默认值 debugEnabledfalse

// GETTER
Armchair.debugEnabled() -> Bool
// SETTER
Armchair.debugEnabled(debugEnabled: Bool)
日志

Armchair 允许您设置一个闭包来捕获调试日志,并连接所需的日志框架。

Armchair.logger(logger: ArmchairLogger)
仅iOS配置

这些配置函数仅适用于iOS构建,因为它们依赖于仅限iOS的框架和函数。

usesAnimation配置决定Armchair在显示模态SKStoreProductViewController时是否使用动画。其默认值为true

// GETTER
Armchair.usesAnimation() -> Bool
// SETTER
Armchair.usesAnimation(usesAnimation: Bool)

tintColor配置指定在usesAlertControllertrue时应用于UIAlertController的着色颜色。其默认值为nil,这意味着不对着色颜色进行自定义。

// GETTER
Armchair.tintColor() -> UIColor?
// SETTER
Armchair.tintColor(tintColor: UIColor?)

usesAlertController配置决定Armchair在iOS 8上显示警报时是否使用UIAlertController。默认情况下,我们不使用它,因为在iOS 8.0的警报控制器中无法进行按钮重排。默认值为false。改变此值对iOS 7没有任何影响。

// GETTER
Armchair.usesAlertController() -> Bool
// SETTER
Armchair.usesAlertController(usesAnimation: Bool)

opensInStoreKit配置决定Armchair是否使用SKStoreProductViewController在App内打开App Store链接。默认情况下,iOS 7上此值为false,iOS 8上为true

// GETTER
Armchair.opensInStoreKit() -> Bool
// SETTER
Armchair.opensInStoreKit(opensInStoreKit: Bool)

默认值为iOS 7上有两个原因。

  • SKStoreProductViewController 不允许用户撰写评论(截至iOS 7)!
  • 在SKStoreProductViewController内部,iTunes联盟代码(截至iOS 7)不起作用。

Armchair函数

userDidSignificantEvent(canPromptForRating: Bool)告诉Armchair用户执行了重要事件。重要事件是你想让其成为的事件。如果你的应用用于VoIP调用,那么你可能在用户发起调用时调用此函数。如果是游戏,你可能在用户击败关卡Boss时调用此函数。用户执行了足够多的重要事件并且足够多地使用了该应用,你可以通过为canPromptForRating传递NO来抑制评分警报。评分警报将简单地延迟到再次调用时使用canPromptForRatingtrue。评分警报也可以通过appLaunched:appEnteredForeground:通知来触发。

Armchair.userDidSignificantEvent(canPromptForRating: Bool)

除了上述可以触发提示显示的功能外,还有一个基于闭包的变体,允许您自定义是否现在是显示提示的适当时间。

Armchair.userDidSignificantEvent(shouldPrompt: ArmchairShouldPromptClosure)

关于这些功能的详细信息,请参阅“Should-Prompt Closure”部分。

showPrompt()告诉Armchair显示评论提示警报。如果存在互联网连接,用户尚未拒绝评分,尚未对当前版本进行评分,并且您正在跟踪新版本,则将显示提示。您可以调用此方法来显示提示,比如在某些特殊事件情况下,比如在您的应用程序中提供积极反馈。

Armchair.showPrompt()

showPromptIfNecessary()告诉Armchair如果所有限制条件都已满足,则显示评论提示警报。如果所有限制条件均已满足,存在互联网连接,用户尚未拒绝评分,尚未对当前版本进行评分,并且您正在跟踪新版本,则将显示提示。您可以在某些特殊事件下调用此方法,例如用户登录。

Armchair.showPromptIfNecessary()

reviewURLString()函数是评论URL字符串,它通过将appIDaffiliateCodeaffiliateCampaignCode替换为当前平台的模板URL来生成。

Armchair.reviewURLString() -> String

rateApp()告诉Armchair打开用户可以指定评分的应用程序商店页面。这还会记录此事件已发生的事实,因此对于此版本的用户不会再提醒评分应用程序。您唯一可能直接调用此方法的场景是,如果您的应用程序中有显式的“评估此应用”命令。在其他所有情况下,请勿担心调用此方法 - 而是只需调用上面列出的其他函数,让Armchair处理何时询问用户是否评分应用程序的账目管理工作。

Armchair.rateApp()

ratingConditionsHaveBeenMet()在满足显示提示的所有设置条件时返回true。

Armchair.ratingConditionsHaveBeenMet() -> Bool

resetUsageCounters()重置应用程序使用计数器。调用此方法将重置UseCount、SignificantEventCount和FirstUseDate(daysUntilPrompt)。

Armchair.resetUsageCounters()

resetAllCounters()重置所有计数器。调用此方法将重置由Armchair跟踪的所有值。

Armchair.resetAllCounters()
仅限iOS功能

closeModalPanel()告诉Armchair立即关闭任何打开的评分模态面板,例如,一个SKStoreProductViewController

Armchair.closeModalPanel()

闭包

Armchair对于回调使用可选闭包而不是代理函数。默认为nil。

Armchair.onDidDisplayAlert(didDisplayAlertClosure: ArmchairClosure?)
Armchair.onDidDeclineToRate(didDeclineToRateClosure: ArmchairClosure?)
Armchair.onDidOptToRate(didOptToRateClosure: ArmchairClosure?)
Armchair.onDidOptToRemindLater(didOptToRemindLaterClosure: ArmchairClosure?)
仅限iOS的闭包
Armchair.onWillPresentModalView(willPresentModalViewClosure: ArmchairAnimateClosure?)
Armchair.onDidDismissModalView(didDismissModalViewClosure: ArmchairAnimateClosure?)
Should-Increment Closure
Armchair.shouldIncrementUseCountClosure(shouldIncrementUseCountClosure: ArmchairShouldIncrementClosure?)

默认情况下,Armchair每次应用进入前台都会增加使用计数。如果您想抑制这种行为(即不计算由切换应用导致的Facebook登录期间的前台事件),您可以使用返回false以忽略前台事件或返回true以按正常方式计数的ArmchairShouldIncrementClosure来实现。

Should-Prompt Closure

Armchair允许您设置一个在弹出显示之前立即调用的闭包。

public typealias ArmchairShouldPromptClosure = (ArmchairTrackingInfo) -> Bool

ArmchairShouldPromptClosure将Armchair用于确定是否调用提示的键值传递给您(在ArmchairTrackingInfo的info字典中找到),并期望一个Bool返回值,表示是否应该显示提示。这让您有机会做最后的自定义逻辑,以确定是否适当时机显示提示。

Armchair.shouldPromptClosure(shouldPromptClosure: ArmchairShouldPromptClosure?)

除了全局的shouldPromptClosure之外,触发提示显示的Armchair函数(showPromptIfNecessaryuserDidSignificantEvent())都有自己的闭包变体,允许您自定义是否适当时机显示提示。

Armchair.showPrompt(shouldPrompt: ArmchairShouldPromptClosure)
Armchair.userDidSignificantEvent(shouldPrompt: ArmchairShouldPromptClosure)

使用这些函数而不是它们的Bool姐妹函数时,不使用Armchair的任何内部逻辑来确定是否显示提示。**仅**使用您提供的闭包的返回值来决定是否显示,这仅基于您在闭包中返回的值。这也意味着,即使设置了全局的shouldPromptClosure(如果设置),在使用这些函数时也不会调用。

注意: shouldPromptClosure是在主线程上同步运行的,因此请确保适当处理。

NSUserDefaults和键

Armchair为其使用的NSUserDefaults键提供了合理的默认值,但您可以根据需要在此处进行自定义。获取/设置存储Armchair使用数据的NSUserDefaults键。默认值的形式都是"<appID>_Armchair<设置>"

// GETTER
Armchair.keyForArmchairKeyType(keyType: ArmchairKey) -> String
// SETTER
Armchair.setKey(key: NSString, armchairKeyType: ArmchairKey)

您不必使用NSUserDefaults作为您的键/值存储,尽管Armchair默认使用它。如果您想要在所有用户的设备上同步评分和使用统计数据,您可能想使用NSUbiquitousKeyValueStore。这将确保用户不会在不同的设备上被提示对同一款应用的不同版本进行评分。

// GETTER
Armchair.userDefaultsObject() -> ArmchairDefaultsObject?
// SETTER
Armchair.userDefaultsObject(userDefaultsObject: ArmchairDefaultsObject?)

userDefaultsObject可以是任何响应ArmchairDefaultsObject协议的对象——本质上是对NSUserDefaults api的简化版。

@objc public protocol ArmchairDefaultsObject {
    func objectForKey(defaultName: String) -> AnyObject?
    func setObject(value: AnyObject?, forKey defaultName: String)
    func removeObjectForKey(defaultName: String)

    func stringForKey(defaultName: String) -> String?
    func integerForKey(defaultName: String) -> Int
    func doubleForKey(defaultName: String) -> Double
    func boolForKey(defaultName: String) -> Bool

    func setInteger(value: Int, forKey defaultName: String)
    func setDouble(value: Double, forKey defaultName: String)
    func setBool(value: Bool, forKey defaultName: String)

    func synchronize() -> Bool
}

因此,要与iCloud和NSUbiquitousKeyValueStore一起使用,设置如下

Armchair.userDefaultsObject(NSUbiquitousKeyValueStoreSubclass.defaultStore())

...您有一个符合协议的子类。

您可以为Armchair存储使用数据的键设置keyPrefix。默认值是appID,它将添加到键的前面。设置keyPrefix可以防止不同的应用在使用共享键/值存储时相互覆盖。

// GETTER
Armchair.keyPrefix() -> String
// SETTER
Armchair.keyPrefix(keyPrefix: String)

配置/使用示例

有关如何使用和设置Armchair的更多信息,请参阅iOS和OS X应用的示例项目。

Armchair与Appirater比较

Appirater非常好,自2009年推出以来已被许多开发人员使用。它经过了多年的更新,满足了很多人需求,但仍然让有经验的开发人员有很多需求。Appirater是

  • 不可在Swift中使用
  • 仅适用于iOS
  • 不必要地混合了大量类方法和实例方法
  • 在两者任一国都是更好的情况下,使用混淆的宏和运行时配置来设置
  • 利用古老的Delegate模式进行回调,而现在是Blocks和Closures的时期
  • 无法在较小的补丁更新时禁用
  • 没有iTunes联营支持
  • 无法阻止两个设备上对同一应用和版本的重复提示
  • 使实现者必须编写更多代码以处理生命周期事件

我开始在Appirater的分支中解决这些问题,但很快意识到整个项目可以以更好的方式重写以解决上述问题。Armchair是

  • 使用完整的Swift实现
  • 适用于iOS和Mac
  • 作为Singleton运行,具有类级,透传便捷方法。
  • 可以通过建立的API在运行时配置每个方面。
  • 使用Closures进行所有事件回调和通知
  • 允许开发人员在不影响较大更新时轻松禁用提示
  • 允许使用iTunes联营代码。
  • 允许您防止两个设备上对同一应用和版本的提示
  • 通过监听生命周期事件的通知来减少实现者需要编写的代码

在这些增加、修改和功能都添加完成后,将它们传回Appirater已经太多了,于是Armchair孕育而生。话虽如此,一些现有的代码逻辑、方法和语言翻译(超过32个!)都来自于Appirater,因此需要给予适当的认可。没有它,Armchair就无法存在。谢谢!

Armchair与UAAppReviewManager比较

UAAppReviewManager可以看作是Armchair的丑陋双胞胎。它们由同一人编写,API、逻辑和感觉非常相似。主要区别在于Armchair是使用Swift从头开始重写的,旨在用于也采用Swift的新项目。

从Appirater或UAAppReviewManager升级

Armchair会自动将存储在Appirater/UAAppReviewManager应用下的NSUserDefault键转换为Armchair默认使用的键。值将会传过来,而旧的不再使用的Appirater/UAAppReviewManager键会自动从设置中删除。

计划如何进行?

我们对Armchair的未来版本有一些想法。如果您希望加快这一过程,请自由地进行分叉/实现。

  • 100%单元测试覆盖率
  • 添加使用自定义类(不仅是UIAlertViewUIAlertControllerNSAlert)呈现提示的能力
  • 添加更多的本地化:持续进行中
  • 您的想法

错误/拉取请求

如果你们看到改善Armchair的方法或者看到错误,请告诉我们。我们乐于接受那些有整洁代码和大多数人都觉得有用的功能的拉取请求。在Swift社区仍在决定适当的代码结构和风格的时候,请避免简单的风格投诉(空格 > 制表符等...)

Armchair是什么意思?

“Arm”指的是应用审核管理器(App Review Manager)。椅子是为了在页面上放置一张酷炫的图片。

谁创造了Armchair?

Matt Coneybeare 来自 Urban Apps。我们制作有趣的东西。来看看我们的作品。

其他开源Urban Apps项目

  • UAAppReviewManager - iOS和Mac App Store应用的审核提示工具(Obj-C)
  • UAModalPanel - iOS中的动画模态面板替代方案
  • UALogger - Mac/iOS应用的日志工具
  • UAObfuscatedString - 用于隐藏敏感字符串的简单NSString类别
  • UAProgressView - 简单轻便且功能强大的动画环形进度视图
  • Urban - 使用柔软的暗色背景,带细微的蓝、橙和黄色的Xcode配色方案

许可证

Armchair遵循MIT许可证发布。更多信息请参阅LICENSE