我正在开发一个 iOS 14 小部件,我想要我现有的 iOS 11+ 应用程序。整个过程非常繁琐,因为经常发生某些事情没有按预期工作。
例如,小部件显示意外数据,或未按预期呈现(例如,如此处所述)。我认为当系统从我的应用程序扩展请求小部件及其内容时出现问题。但是我无法弄清楚这可能是什么。
有没有办法实际调试小部件扩展?查看代码何时执行以及它是如何工作的?
我已经尝试将调试器连接到小部件扩展(使用 Debug/Attach to processXcode 中菜单)。当进程在那里列出时,调试器没有显示日志输出,也没有在断点处停止。
使用系统控制台显示 iOS 模拟器设备的日志也不起作用。是否使用print(...)或都没有关系NSLog(...)。没有输出到达控制台。
我正在开发iOS 7+应用程序,并希望动画更改UILabel的内容.我不希望做这样任何图形动画像淡出的新的内容旧内容/褪色.因此iOS提供的所有标准动画功能都不能使用Layer动画或动画块(至少我是这么认为).
假设UILabel显示一些仪表值,如"200 V",此文本应更改为"400 V".该文本不应只是从"200 V"跳到"400 V",而应使用一些缓和功能计算:"200 V","220 V","240 V"......"390 V","395 V"......"400 V"
在Android中可以使用ValueAnimator轻松解决:
ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);
animation.setInterpolation(new EaseOutInterpolator());
animation.setDuration(2500);
animation.setStartDelay(500);
animation.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpate(ValueAnimator animator) {
float currentValue = animator.getAnimatedValue.floatValue();
label1.setText(String.format("%.2", fromValue1 + ((toValue1 - fromValue1) * currentValue)));
label2.setText(String.format("%.2", fromValue2 + ((toValue2 - fromValue2) * currentValue)));
...
}
});
animation.start();
Run Code Online (Sandbox Code Playgroud)
iOS中也有这样的东西吗?我找到了不同的解决方案,但它们都很旧(2010/11)并且最终都是使用NSTimer和自己的缓动函数手动实现这种行为.
毫无疑问,人们可以自己实现这一点,但这将非常麻烦而且不是很优雅.那么:iOS中有什么东西可以解决这个问题,或者至少有方便的第三方实现吗?
非常感谢你!
我正在运行一个基于Symfony 2.8的Web应用程序,它使用Ajax将一些表单数据发送回控制器.
到目前为止一切工作正常,但自从最新的macOS更新到版本10.13.4用户开始报告,提交表单在Safari中不再起作用.10.13.4上的其他macOS版本和其他浏览器仍然可以正常工作,因此它似乎是Safari中的一个问题.当然我向Apple提交了一份错误报告,但我不认为,我会从那里得到反馈......
我能够找出问题的根源:提交包含空文件输入的数据失败:
// safri_bug.html
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<form name="app_booking" method="post" action="/test/submit.php">
<div><input type="text" id="someValue" name="value"></div>
<div><input id="thefile" type="file" name="file"></div>
</form>
<button id="bSubmit" type="button">Submit</button>
<script>
$(document).ready(function() {
$('#bSubmit').click(function() {
var form = $('form');
var data = new FormData(form[0]);
$.ajax({
url : '/submit.php',
type : 'POST',
data : data,
contentType: false,
processData: false,
context : this,
success : function(response) {
alert('success: ' + response);
},
error: function (xhr, ajaxOptions, thrownError) {
alert('error: ' + xhr.responseText + ' …Run Code Online (Sandbox Code Playgroud) 为了使用iOS 13测试我的应用内购买,我已将其中一台测试设备更新为iOS 13.1 beta。
在iOS 12上,在我之前有一个特殊的Sandbox登录Settings/iTunes & App Store/Sandbox Account:

但是,在更新到iOS 13之后,此部分丢失。我试图按照iOS 12上类似问题的答案中的说明进行操作,但没有任何效果。我完全搁置了设备,并在Settings/iTunes & App Store和退出了Settings/Apple ID该设备,因此当前该设备未连接到任何帐户(真实帐户或沙箱)。至少据我所知。
我已使用Xcode 11 beta在设备上重新安装了我的应用程序,并尝试执行应用程序内购买。商店显示一个登录提示,表明这是一个沙盒购买。但是,提示仅要求输入密码,而不要求用户名或Apple ID。因此,我不知道在此应使用哪个帐户。
使用新创建的测试用户帐户的密码时,密码未知。我可以使用我的真实Apple ID帐户的密码,该密码在设备设置过程中使用过,但已断开连接。
那么,如何连接到iOS 13中的特定沙盒帐户?
我已经在我的iOS应用程序中使用Dropbox Core API已经有一段时间了.更新到Xcode 7后,当我尝试编译项目时收到以下错误:
ld: '.../Frameworks/Dropbox/iOS/DropboxSDK.framework/DropboxSDK' does not contain bitcode.
You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated
library from the vendor, or disable bitcode for this target.
Run Code Online (Sandbox Code Playgroud)
我知道Bitcode是什么以及它有什么好处.只需在目标Build Settings中设置Enable Bitcode选项即可解决错误No.在这之后一切都编译没有任何错误,应用程序运行没有任何问题.
到目前为止一切顺利,但这是"正确"的解决方案吗?我在Dropbox页面上查看了SDK的更新版本,但我已经使用了最新版本.
该项目包含不使用Dropbox SDK的App Widget,Watch Extension等的其他目标.Enable Bitcode应该在这里使用什么选项?是(出于某种原因)更好地使用相同的值(No在我的情况下)对所有目标?如果主应用程序目标不使用Bitcode,那么为Watch和Widget目标启用Bitcode是否有意义?
这里的最佳做法是什么?
当然,我知道新指南并SKStoreReviewController提示用户进行评论.但这不是要求新的评论,而是要快速访问不同应用的评论.
问题:
以前我使用以下格式从iOS应用程序直接链接到App Store中应用程序的评论选项卡:
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=APP_ID&pageNumber=0&sortOrdering=2&type=Purple+Software&mt=8
Run Code Online (Sandbox Code Playgroud)
这工作正常,但在iOS 11中它只显示App Store应用程序中的空白页面.显而易见的原因是,在iOS 11中,应用页面不再具有"评论"选项卡,但评论位于应用说明和屏幕截图下.
因此,使用以下格式仍然会将用户带到应用程序商店页面,但必须手动向下滚动到审阅.
https://itunes.apple.com/app/idAPP_ID
Run Code Online (Sandbox Code Playgroud)
这当然有效,但必须手动向下滚动到评论.是否有可能直接链接到评论部分(就像在普通HTML页面上使用锚点一样)?
我正在开发一个用于用户身份验证的现有Symfony2.8 Web应用程序项目FOSUserBundle.
除了Web前端,用户还可以使用不同的智能手机客户端使用REST API连接到Web应用程序.因此,在直接登录Web应用程序和连接REST API的原因时,用户都需要进行身份验证.
直到其中一个最新FOSUserBundle更新bcrypt密码哈希和用于salt存储在数据库中的地方.
使用REST API进行连接时,会将salt传输到客户端,以使用相同的salt对密码进行本地哈希处理.散列密码将发送回Web应用程序进行身份验证.
我知道发送散列密码而不是纯文本不会增加(很多)额外的安全性,因为只能使用HTTPS进行通信.然而,这是客户端工作的方式:他们需要salt来生成哈希密码.我可以在将来更新客户端,但现在这只是工作方式.
问题:
他们的方式FOSUserBundle哈希密码已经改变:因为不考虑手动指定盐而是让PHP自动生成盐(在PHP 7中甚至不能手动设置盐),手册盐不再受支持.
直接登录Web应用程序时没有问题,但由于REST客户端仍需要salt,因此此更新会中断REST连接.
有没有办法结合这两种方法?让PHP自动创建盐,提取并将此盐发送给客户端?
据我所知,salt与哈希存储在同一个字符串中:
但是,只需从哈希字符串中复制21个char盐并将这些发送到客户端就不起作用了.似乎这21个字符足以测试/验证密码,但不能重新创建哈希.它是否正确?
那么,是否有任何解决方案使用PHP password_hash而不设置盐,并同时了解用过的盐?
编辑1:
回答@RiggsFolly问题:MD5在任何时候都没有使用过.这是不正确的,bcryp/ password_hash不会两次创建相同的哈希.如果密码和盐都相同,它会这样做:
$s = 'password';
$salt = 'salt5678901234567890123456789012';
$options['salt'] = $salt;
$h1 = password_hash($s,PASSWORD_BCRYPT,$options);
$h2 = password_hash($s,PASSWORD_BCRYPT,$options);
echo $h1 . PHP_EOL;
echo $h2 . PHP_EOL;
Run Code Online (Sandbox Code Playgroud)
结果:
$2y$10$salt56789012345678901uTWNlUnhu5K/xBrtKYTo7oDy8zMr/csu
$2y$10$salt56789012345678901uTWNlUnhu5K/xBrtKYTo7oDy8zMr/csu
Run Code Online (Sandbox Code Playgroud)
password_hash如果未指定salt,将为相同的密码创建新哈希.这是因为,盐将随机创建,而不是每次调用时产生不同的盐.
编辑2:
正如编辑1中所见,使用具有32个字符的盐将导致字符串仅包含盐的前21个字符.但是,这个salt-prefix不能用于重新创建相同的哈希值,因为它太短而不能被接受.
但是,如果前缀填充0,它似乎工作:
$s = 'password';
$salt = 'salt5678901234567890123456789012';
$salt_prefix = 'salt5678901234567890100000000000'; …Run Code Online (Sandbox Code Playgroud) 我对在哪里可以找到验证常规应用内购买所需的共享秘密感到困惑。
大约一年前,我创建了一个服务器脚本,该脚本从我的 iOS 应用程序调用,以使用 Apples.../verifyReceipt端点验证 App Store 收据。
这在去年运行良好,现在我想扩展脚本以对第二个应用程序执行相同的操作。
问题:我不记得在哪里可以找到必须与收据一起发送给 Apple的应用程序共享机密。
第一个应用程序(“MyApp”)的秘密存储在脚本中。但是我无法在 App Store Connect 中重新找到它。
这显示了 MyApp 没有特定于应用程序的共享机密而只有主共享机密的信息。我可以显示主共享密钥,但它与验证脚本中存储的不同。
此外,信息文本说,特定于应用程序的共享机密用于验证自动更新订阅。与消耗性或非消耗性 IAP 无关。
因此,我认为这不是我正在寻找的共享秘密。但是我还能在哪里找到正确的共享密钥(已经存储在我的脚本中的那个?)
我在哪里可以找到我的新应用程序的秘密?
我正在使用MonologBundle我的Symfony 2.8项目来管理日志消息.使用不同的Handlers方法将日志写入文件并通过电子邮件同时发送是没有问题的.
我想减少通过邮件收到的邮件数量.我已经使用DeduplicationHandler和FingersCrossed处理程序按错误级别进行筛选并避免重复消息.这工作正常,但还不够.
例如,我想减少有关PageNotFound错误的邮件数量.当然,如果/existingPage找不到,我想收到通知,但我对有关/.well-known/...文件的消息不感兴趣.
另一个示例是关于第三方CSV解析器组件中的错误的消息.我不感兴趣有几个已知且无害的错误,但当然其他错误也很重要.
这些错误/消息是由第三方代码生成的,我不能影响源.我完全可以忽略这些消息,但这不是我想要的.
我正在寻找一种按内容过滤消息的解决方案.如何在Monolog中完成?
我已经尝试使用a来解决这个HandlerWrapper问题,并在另一个问题中讨论了这个问题:这个想法是,HandlerWrapper作为过滤器.的HandlerWrapper是由独白调用时,它检查消息内容,并决定阉它应该被处理或不(例如丢弃所有消息,包括文本"./well-known/").如果消息通过,HandlerWrapper应该简单地将其移交给它的嵌套/包装处理程序.否则,将跳过该消息而不进行进一步处理.
然而,这个想法不起作用,而另一个问题的答案表明,a HandlerWrapper不是解决这个问题的正确方法.
所以新的/实际的问题是:如何为Monolog消息创建一个过滤器,让我控制一个特定的消息是否应该被处理?
我正在开发我的第一个基于Symfony的WebApp项目.我已将Symfony配置为不仅将日志消息写入不同的日志文件,还将其作为电子邮件立即发送严重错误消息.这很好用.但是,我想在默认日志消息中添加一些其他信息,以便更容易找到实际的错误源.
示例:一个页面的Twig文件从.yml文件加载本地化文本.文本包含一个%about_link%占位符,应该由关于页面的路径/ URL替换.我忘了这个替换,所以链接没有指向URL而是指向%about_link%.这导致一个NotFoundHttpException因为没有溃败%about_link%可以找到...
没什么大不了.但要找到包含此错误的实际页面/控制器有点棘手.默认日志消息显示以下内容:
[2015-12-14 17:19:36] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "No route found for "GET /%25about_link%25"" at /long/path/to/symfony/.../RouterListener.php line 176 []
Run Code Online (Sandbox Code Playgroud)
所以RouterListener.php当试图找到一条路线时,会抛出异常%about_link%.好的,这并没有给我任何关于这个坏链接所在页面的提示.
当然,对坏路线的呼叫根本不必位于任何页面上.用户可能直接输入了错误的链接.Symfony必须存储/记住最后一页,以提供有关可能来源的任何提示.那么,是否可以包含这些信息呢?
另外,我想添加有关报告问题的主机的信息.我运行在WebApp的两个实例:www.my_web_app.xy和betatest.my_web_app.xy,这将是一个很大的帮助,如果如果它来自日志消息将显示www或betatest.
将此信息添加到我自己创建的日志消息中是没有问题的,但是如何将此信息添加到Symfony或第三方代码生成的消息中?我必须在它到达日志处理程序之前以某种方式拦截日志消息.这可能吗?