Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何制作一款只能在有限时间内使用的可可豆演示应用程序?_Macos_Cocoa - Fatal编程技术网

Macos 如何制作一款只能在有限时间内使用的可可豆演示应用程序?

Macos 如何制作一款只能在有限时间内使用的可可豆演示应用程序?,macos,cocoa,Macos,Cocoa,我使用过很多可可豆演示应用程序,它们在3天或一个月左右停止工作。他们是怎么做到的?最好的办法是什么?还有,这些限制是什么?(免责声明:我以前从未做过试用版,只是仔细阅读并使用了一些。) 这些限制都来自这样一个事实:用户可以修改用户系统上的任何内容。因此: 聪明的小气鬼可能会改变你的应用程序的可执行文件,使其无法执行或以其他方式击败你的任何检查 你必须将所用的时间(或者,更懒散但不友好的是,他们开始使用你的应用程序的日期)存储在某个地方。无论您将其存储在何处,用户都必须能够更改它(因为您的应用程

我使用过很多可可豆演示应用程序,它们在3天或一个月左右停止工作。他们是怎么做到的?最好的办法是什么?还有,这些限制是什么?

(免责声明:我以前从未做过试用版,只是仔细阅读并使用了一些。)

这些限制都来自这样一个事实:用户可以修改用户系统上的任何内容。因此:

  • 聪明的小气鬼可能会改变你的应用程序的可执行文件,使其无法执行或以其他方式击败你的任何检查
  • 你必须将所用的时间(或者,更懒散但不友好的是,他们开始使用你的应用程序的日期)存储在某个地方。无论您将其存储在何处,用户都必须能够更改它(因为您的应用程序以用户的身份运行),这意味着如果用户找到它,他们可以重置时钟
  • 如果您在沙箱中运行,则不可能执行此操作,除非您将上述时间跟踪数据存储在用户默认值或密钥链中(这两种数据都可以清晰可见),或者请求临时异常权限以在文件系统的任何位置写入。有时间限制的试用无论如何都不能在应用商店中进行,但如果未来版本的Mac OS X需要应用商店或沙箱,您的时间限制将被打破,我们只能希望它不会阻止用户完全使用您的应用程序
  • 还有处理付款的问题。一种方法是在app Store中销售应用程序,无需任何试用强制代码,并自行发布一个始终强制执行时间限制的独立版本。如果您自己处理付款,则需要在用户系统上存储用户许可证的记录,并且需要检查该许可证。这就容易出现同样的问题:用户可能伪造许可证或“借用”(例如,从warez网站下载)他人的许可证
当然,好处是用户有一定的时间免费试用该应用程序,而不必掏钱,因此在这段时间结束时(如果你的应用程序很好,满足了他们的需求),他们更有可能购买

在试用期结束时,您可以选择发生什么:

  • 将用户完全锁定在应用程序之外
  • 裁剪特征。橡子就是这样做的
  • 让他们打开文档,但不保存或打印。(您可以阻止屏幕截图,但祝您在处理错误报告时好运。)
  • 让他们保存或(如果适用)打印,但以某种方式降低部分或全部文档的质量。对于视觉创作,如图像,水印可能会起作用。对于音频,您可以将采样率限制为20 kHz或更低。(这里有一个例子,你可以拥有你自己的专有格式,你总是可以无损地处理,并且只会将输出降级为常见格式,如TIFF、JFIF或AIFF。)裂变做到了这一点
  • 只是唠叨他们。(可与上述任何一项结合使用。)
  • 对他们唠叨,并延迟用户解除它的能力。用户不付费的时间越长,您甚至可以增加延迟
试用期的一个很好的替代方案是拥有一个单独的“免费”版本,功能更少(或带有广告)。这在两个应用商店中尤其常见

另一个考虑因素是试用期是使用天数还是首次使用后的天数。后者更容易实现,因为您只需记录首次使用的日期并执行减法。前者对用户更友好,因为它不会惩罚用户只启动一次应用程序,玩五分钟,然后在31天后回到应用程序进行真正的试用

您还可以对启动次数进行限制。从第一次使用开始,它就可以简单地实现,但不会惩罚只玩一次应用程序

有些用户就是不付钱。有些用户会不惜一切代价不付钱

所以你需要找到一个平衡点。你需要提供一个基本的难度,这样最懒惰的小气鬼就不能简单地
默认编写com.example.yourapp DaysSinceFirstUse-int 0
,并永远使用你的应用程序,同时又不会让你的应用程序过于繁重而无法试用(更不用说付费)

所以这里有一些事情是不能做的:

  • 尝试强制用户许可证上的用户名(购买时输入)与其帐户或通讯簿上的用户名相等。任何名字都有十几种不同的书写方式,有些人有多个名字(通过婚姻、化名、合法姓名变更、多种语言、星际迷航等等),所以这是一种伪造的支票,会让更多的合法用户感到不安,而不是阻止海盗
  • 将用户的数据作为人质。请参阅我上面关于您总是无损处理的专有格式的优点的观点。如果您在试用期间总是降低输出,请在应用程序启动时的“这是试用版”对话框中明确这一点
  • 需要internet连接。不是每个人都有一个(可以连接到任意服务器),也不是每个人都一直有一个。向游戏行业学习:不要疏远你的用户
  • 安装在后台运行和/或与应用程序分离的任何类型的版权强制软件。用户会因此而恨你
至于怎么做,以下是我的建议:

  • 实施“实际使用天数”检查。这可能是一个卖点。当一次审判明确表示它使用这种检查时,我的心感到温暖。
    • 我想在几小时内储存。启动时,从您存储它的任何位置获取当前的小时数。再加上两个小时,然后写回去(这样用户就不能强迫退出你的应用程序来解决这个问题)。退出时,将启动后的实际小时数添加到最初读取的数字中,并将修改后的数字写回
  • 商店一