我在恢复托管的应用内购买内容时遇到问题.有时它有效,有时它根本不起作用.我的用户也在报告此问题.
我很难尝试复制它,但是当它发生时我设法遇到了这种情况.
现在每当我从Xcode上运行我的Mac上的应用程序时,我的商店代表会在启动后不久通知队列中有两个待处理的恢复事务.并且正在调用以下函数:
func provideContent(_ transaction:SKPaymentTransaction) {
if transaction.downloads.count > 0 {
GLXLogger.shared.addGeneralLog(format: "[STORE] starting download")
SKPaymentQueue.default().start(transaction.downloads)
}
Run Code Online (Sandbox Code Playgroud)
我看到了日志消息,[STORE] starting download所以我知道这段代码已经执行了.然后什么都没发生.updatedDownloads不叫.我已经验证finishTransaction也没有调用,所以这不可能中断正常执行.
我基本上没有想到可能导致这个问题的想法.我知道这个场景有两个挂起的恢复事务,但我认为没有理由导致这样的失败.它对应于我在一些用户的日志中看到的内容.对于他们SKPaymentQueue.default().start(transaction.downloads)被称为后来没有任何事情发生.
如果你能帮我调试一下,我至少会对你认为可能造成这种奇怪行为的想法提出一些看法.
storekit in-app-purchase iap-hosted-content swift skpaymenttransaction
这可能是一个愚蠢的问题,但在iOS上,我们可以通过在info.plist文件(NSLocationWhenInUseUsageDescription,NSLocationUsageDescription或NSLocationAlwaysUsageDescription)中包含相关键来指定访问用户位置的原因.
但是,似乎这在Mac上无法实现(至少没有一个对我有用).
有谁知道如何包含这些信息,以便用户知道我的应用程序想要访问其位置数据的目的是什么?
我按照安装Alamofire的swift2分支的说明与可可豆荚.该应用程序在模拟器中运行良好,但是,当我将其存档以提交Xcode 7 GM时,我收到一封错误的电子邮件:
"该软件包包含无效的Swift实现.该应用程序可能已使用不合规或预发布工具构建或签名"
这个问题肯定与框架有关,因为没有它我可以使用相同版本的Xcode提交beta测试.我尝试在Alamofire的构建设置中关闭位代码,但它没有帮助.
有谁知道如何解决这一问题?
我的podfile仅针对Alamofire框架链接:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!
pod 'Alamofire', :git => 'https://github.com/Alamofire/Alamofire.git', :branch => 'swift-2.0'
Run Code Online (Sandbox Code Playgroud)
我觉得很奇怪的一件事是,当我尝试提交档案时,我有以下屏幕:
也许这有助于确定问题.额外的两个目标是通知中心小部件.禁用它们无法解决问题.如果没有Alamofire,我可以提交两个小工具进行beta测试.
对于那些暗示"Swift 2.0处于测试版以便你无法提交"的人我想再次澄清 - 我正在尝试提交beta测试.而且是,它是可能的!
正如我所指出的,如果我删除Alamofire并且我自己的应用程序是用Swift 2.0编写的,我可以提交beta测试.如果有人仍然认为"这是不可能的",这里有一些信息给你.请在发表评论或向下投票问题之前先阅读.
这个问题仍然存在于Xcode 7 GM ...
在我的某个应用中,用户可以按名称搜索位置.我正在使用Google Maps API在帮助下显示自动完成的建议GMSPlacesClient.
下面的代码说明了我是如何做到的:
func performSearch() {
let filter = GMSAutocompleteFilter()
filter.type = GMSPlacesAutocompleteTypeFilter.City
placesClient?.autocompleteQuery(searchBar.text!, bounds: nil, filter: filter, callback: { (results, error: NSError?) -> Void in
// update results
})
}
Run Code Online (Sandbox Code Playgroud)
这段代码效果很好.但是,我注意到一种情况,它有点失败.一个例子是我搜索"芝加哥".如果我非常快地键入"Ch",有时会正确地返回"Ch"的结果,但有时我会得到"C"的结果.问题出现是因为这些是异步请求,每次用户输入内容时我都会执行搜索.因此,即使"C"的请求在"Ch"之前启动,它也可以最后返回.
因此,我需要在开始新请求之前取消之前发起的所有请求.但是,我找不到这样做的方法.有谁知道如何实现它?
我试图使用一种解决方法:
let string = myResults[0].attributedFullText
string.enumerateAttribute(kGMSAutocompleteMatchAttribute, inRange: NSMakeRange(0, string.length), options: .Reverse) { (value, range, stop) -> Void in
if value != nil {
let t = NSString(string: string.string)
let str = t.substringWithRange(range)
//now compare with original search string
}
}
Run Code Online (Sandbox Code Playgroud)
这解决了芝加哥(以及其他类似案例)的问题.但是,当用户输入拼写错误时,此方法将禁用自动填充建议,因为匹配的字符串和原始搜索字符串在这种情况下总是不同.
所以,这个问题仍然存在.理想的方法是取消所有先前发起的请求.如果Google还存储了初始搜索字符串,则可以使用与上述类似的方法,但看起来请求后不会返回原始搜索字符串...
似乎唯一的选择是不使用SDK,而是使用Alamofire发送请求.然后可以轻松取消这些请求.但是,我不确定这有多好......
我正在考虑在我的一个应用程序中采用按需资源。它将包含大约 30 个视频,大多数用户只会观看一次。因此,它似乎是按需资源的不错选择。该应用程序的生命周期预计为一周左右,因此如果系统在用户使用完并忘记删除它后清除其资产,那就太好了。
但是,当应用程序仍在使用时,我显然希望保留一些资产可用。根据官方文档:
当所有相关标签不再被任何请求保留时,资产包有资格进行清除。与标签关联的资源可能会在设备上保留一段时间,然后被清除,包括跨应用程序启动。
此描述非常含糊,因为它没有提供足够的提示,说明下载后何时可以清除资产。它是否仅在设备内存不足时发生?或者即使设备有很多可用空间,系统也会尝试始终优化可用内存?
如果有人能从他们的经验中判断出上述哪一项是正确的,我将不胜感激。就我的应用而言,上述不确定性可能导致两种情况:
1) 对于内存不足的用户,某些视频将被清除。这很棒,因为如果我将所有视频与该应用程序捆绑在一起,那些用户将无法下载该应用程序,因此这种不便完全可以忍受。
2) 在其 128GB 设备上拥有 64GB 可用空间的用户将无法访问某些视频,并且必须重新下载它们。这将导致 ODR 的性能更差,然后简单地将所有视频捆绑在一起,我想避免这种情况。
我最近注意到,tintColor在最近的iOS 10更新中,该属性的行为发生了显着变化.
我有一个以前完美运行的代码,现在根本不工作.
在我的一个应用程序中,我有一组UIBarButtonItems被添加到toolbarItems视图控制器的数组中.它们显示得很好.
但是,在某些时候,我想要更改某些项目的色调颜色以响应用户操作.代码很简单:
flagButton.tintColor = [UIColor redColor];
Run Code Online (Sandbox Code Playgroud)
这个代码以前用过,但现在它不起作用!我已经验证了对UIBarButtonItemexists 的引用以及执行这行代码.但是,色调颜色没有改变.
在tintColor财产的描述中,它说:
要在此属性更改时刷新子视图呈现,请覆盖tintColorDidChange()方法.
我尝试添加tintColorDidChange方法,但没有调用.我在这个阶段的假设是,一旦tintColor更改,我的按钮不会自动刷新.
有人可以帮忙找到手动刷新它的方法吗?该按钮是UIBarButtonItem带图像的标准.
实际上我注意到,如果我更改tintColor工具栏而不是单个项目代码正在运行.似乎由于某种原因,在单个项目上设置色调颜色不再有效.有谁知道为什么会这样?
由于matt的提示,我能够找到问题的根源.它是由启动应用程序时执行的代码引起的:
[[UITableViewCell appearance] setTintColor:[ColourTheme sharedTheme].navBackground];
Run Code Online (Sandbox Code Playgroud)
现在,我完全不知道为什么这条线会引起UIBarButtonItem色彩问题...这可能是因为它引入了一些含糊之处UIAppearance.无论如何,由于我自己不再需要这条线,我可以轻松地将其移除.我仍然会打开我的问题,因为我认为这种行为非常奇怪,所以在某种程度上,这个问题仍然没有答案.
就像一个额外的信息 - 遇到这些问题的视图控制器包含一个表视图.
在使用迁移助手将数据从旧Mac迁移到新Mac之后,我不再可以使用Xcode命令行工具。每当我xcodebuild在终端中运行任何命令(即使xcodebuild没有参数)时,都会出现以下错误:
dyld: Library not loaded: @rpath/DVTFoundation.framework/Versions/A/DVTFoundation
Referenced from: /usr/bin/xcodebuild
Reason: image not found
Abort trap: 6
Run Code Online (Sandbox Code Playgroud)
当我跑步时which xcodebuild我得到/usr/bin/xcodebuild。
当我跑步时xcode-select -p我得到/Applications/Xcode.app/Contents/Developer。
奇怪的是,如果我去/Applications/Xcode.app/Contents/Developer/usr/bin打电话给./xcodebuild我,我没有得到上面的错误。
这是我尝试过的:
xcode-select --install。/Library/Developer/CommandLineTools/。sudo xcode-select --switch /Library/Developer/CommandLineTools/。sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/。这些都不能解决我的问题。
我正在运行Xcode 9.4.1和macOS High Sierra 10.13.5。
我尝试按照本指南完全卸载Xcode和所有命令行构建工具。奇怪的是,一旦执行了所有步骤,运行xcodebuild命令就会产生与以前相同的结果。并且xcodebuild仍然位于/usr/bin。
如果我使用安装命令行工具xcode-select --install并从该位置开始 …
macos xcode xcodebuild xcode-command-line-tools macos-high-sierra
我试图将A / B测试限制为从11.3.10开始的iOS应用程序版本。原因是较旧的版本在所有变体中的行为相同,因为它们不包含所涉及的参数知识。反过来,这会引入噪音,使我的实验结论性降低。
因此,我在我的应用程序版本属性中添加了以下正则表达式:
1[1-9]\.[3-9]\.[1-9][0-9]
不幸的是,它没有用。没有用户参与我的实验。然后我决定尝试1[1-9]\.[3-9]\.[1-9][0-9].*。但是,仍然没有运气。如果我忽略此设置并运行实验,我会立即看到参与其中的用户的数据。准确地说是在30分钟内达到138。
我的最新版本(11.3.10)的采用率大约为30%,因此很明显,如果设置正确,我会看到一些用户。
如果您能让我知道我在做什么错,我将不胜感激。
regex ios firebase firebase-remote-config firebase-ab-testing
ios ×4
cocoa-touch ×2
macos ×2
swift ×2
alamofire ×1
asynchronous ×1
cocoa ×1
cocoapods ×1
firebase ×1
ios10 ×1
regex ×1
storekit ×1
swift2 ×1
testflight ×1
tintcolor ×1
xcode ×1
xcode7 ×1
xcodebuild ×1