这是我的第一个iOS应用提交,我不希望我的应用被拒绝.
这来自Apple Docs:
CFBundleVersion(String - iOS,OS X)指定捆绑包的构建版本号,该版本号标识捆绑包的迭代(已发布或未发布).构建版本号应该是由三个非负的,周期分隔的整数组成的字符串,第一个整数大于零.该字符串应仅包含数字(0-9)和句点(.)字符.前导零从每个整数中截断,将被忽略(即1.02.3相当于1.2.3).此密钥不可本地化.
CFBundleShortVersionString(String - iOS,OS X)指定捆绑包的发行版本号,该版本号标识应用程序的已发布迭代.发行版本号是由三个以句点分隔的整数组成的字符串.第一个整数表示对应用程序的主要修订,例如实现新功能或主要更改的修订.第二个整数表示实现不太突出的功能的修订.第三个整数表示维护版本.
此键的值与"CFBundleVersion"的值不同,后者标识应用程序的迭代(已发布或未发布).可以通过将其包含在InfoPlist.strings文件中来本地化此密钥.
但似乎有点奇怪.我对此的解释是将两个值相同,即:
CFBundleVersion: 1.0.0
CFBundleShortVersionString: 1.0.0
Run Code Online (Sandbox Code Playgroud)
有人可以确认100%这是我应该放的吗?
UIAlertController有两个按钮,样式设置为:
UIAlertActionStyle.Cancel
UIAlertActionStyle.Default
Run Code Online (Sandbox Code Playgroud)
在iOS 8.2中,"取消"按钮为非粗体,"默认"为粗体.在iOS 8.3中,它们已经转换
您可以看到Apple自己的应用程序,例如,设置>邮件>添加帐户> iCloud>输入无效数据,然后在8.3上显示如下:
不支持的Apple ID
了解更多(粗体)确定(非粗体)
而8.2则是另一种方式.
任何解决方法,使它再次像8.2.为什么会改变?
我在 iOS 游戏中使用 AdMob,最近更新了它,将 AdMob SKAdNetworkIdentifier 包含在我的 Info.plist 文件中(因为我的 AdMob 帐户中出现了这样做的警告)。谷歌的标识符是:
cstr6suwn9.skadnetwork
Run Code Online (Sandbox Code Playgroud)
这一切似乎工作正常,我的 AbMob 帐户页面上的警告消失了。
但几周后,我收到另一个警告,当我检查此页面时:
https://developers.google.com/admob/ios/ios14
它说“选择其他买家”部分中还有 32 个 SKAdNetworkIdentier,AdMob 建议我们也必须将其包括在内。
我还没有更新我的游戏,而且警告已经消失了,所以我不知道是否要添加所有这些额外的标识符。看起来这个列表是定期添加的(最后一次更新是 4 月 9 日),所以如果这是 Google 的计划,那么必须不断更新我的应用程序似乎很痛苦。
我不使用“调解”。那么我需要所有这些第三方的还是只需要 Google 的?
我正在寻找一种在后台执行任务的简单方法,然后在完成时更新某些内容(在主线程上).它处于低级"模型"类中,因此我无法调用InvokeOnMainThread,因为我没有NSObject.我有这个方法:
public void GetItemsAsync(Action<Item[]> handleResult)
{
Item[] items=null;
Task task=Task.Factory.StartNew(() =>
{
items=this.CreateItems(); // May take a second or two
});
task.ContinueWith(delegate
{
handleResult(items);
}, TaskScheduler.FromCurrentSynchronizationContext());
}
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,但是
1)这是最好的(最简单的)方式吗?
2)我担心局部变量:
Item{} items=null
Run Code Online (Sandbox Code Playgroud)
当方法在后台线程完成之前返回时,什么停止消失?
谢谢.
我创建了一个" TransformView"子类UIView,以支持我在翻转动画中使用的双面视图.这已在其他帖子中提出,例如:
@interface TransformView : UIView
@end
@implementation TransformView
+ (Class)layerClass {
return [CATransformLayer class];
}
@end
Run Code Online (Sandbox Code Playgroud)
一切正常,但每次使用以下命令创建TransformView对象时都会收到警告:
TransformView *newTransformView=[[TransformView alloc] initWithFrame:frame];
Run Code Online (Sandbox Code Playgroud)
警告说:
- 在仅变换图层中更改属性不透明将不起作用
我想这个UIView类正在初始化不透明属性,这通常适用于CALayer但不是a CATransformLayer.
子类代码是不是很狡猾?如果是这样,你怎么能为翻转动画创建一个双面视图?
有关如何停止警告的任何想法?
我怀疑TransformView从一个nib文件创建而不是initWithFrame避免警告,但似乎很麻烦,为了避免警告必须这样做.
当我的主视图旋转时,我想重新排列子视图,所以在我的ViewController中,我重写
willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration
Run Code Online (Sandbox Code Playgroud)
并在那里设置子视图的帧.这一切都很好,但在子视图中我也被覆盖了
layoutSubviews
Run Code Online (Sandbox Code Playgroud)
所以他们正确地布置自己.但问题是这个现在被调用两次 - 大概一次我在willAnimateRotationToInterfaceOrientation中设置Frame而一次因为旋转而设置.(如果我没有设置Frame,它会被调用一次.)
当然,ViewController负责布局框架,这看起来像是一个设计缺陷 - 什么是解决方案,所以layoutSubviews只调用一次?
我已经尝试将UIPageControl框架设置为我的屏幕的整个宽度,并将Interface Builder中的对齐设置为Horizontal:right但它仍然保持居中.
"contentVerticalAlignment"是一个UIControl属性,并没有提到它是否适用于文档中的UIPageControl.水平对齐应该适用于UIPageControl吗?如果不是,我将其子类化以使其工作(通过将其嵌入UIView并自己对齐).
当关闭ViewController时,我需要做一些事情,即:
例如,我需要退订事件,或者放弃呈现的警报等。
当popToRootViewController的父级调用popToRootViewController时,不会调用ViewWillDisappear,因此不起作用。
WillMoveToParentViewController仅适用于View Controller包含
Dealloc不好,因为只有在收集垃圾时才这样做。我无论如何都在使用C#Xamarin,它在那儿行不通。
ViewDidUnload不再使用,并且从此不再使用
ViewController本身不应该关心它的显示方式,因此我们如何确定何时将其关闭?
这似乎是一个重要的基本要求。例如,如何在没有此情况的情况下取消订阅模型中的事件?
这是一个类似的问题,但没有好的答案:
我刚刚开始在 AdMob 中收到关于我的带有广告的 iOS 游戏的警告消息:
\n"Some apps haven\xe2\x80\x99t been configured to use SKAdNetwork"\nRun Code Online (Sandbox Code Playgroud)\n而且我可能不会获得一些广告积分。按照这个看起来很容易修复:
\nhttps://developers.google.com/admob/ios/ios14
\n我只是向 Info.plist 添加一个键
\n但在该链接上,它还提到了应用程序跟踪透明度授权,我\xe2\x80\x99m 不确定该怎么办。我知道 ATT 是什么 - 它会发出警报,请求许可跟踪并影响对 IDFA 的访问。但 \xe2\x80\x99s 有点奇怪,Google 说 \xe2\x80\x9c 如果你决定包含 ATT\xe2\x80\x9d。它\xe2\x80\x99s就像Google并不\xe2\x80\x99真正希望你这样做。
\n另外,据我所知,即使在 iOS 14.4 中,在不添加 ATT 警报的情况下仍然可以访问 IDFA。那么一些问题:
\n有谁知道苹果何时(或是否)会强制要求 ATT 警报?他们过去常说 2021 年初 - 有更确定的日期或具体版本号吗?它似乎还没有被强制执行(我的游戏更新没有它本周已获得批准),并且 IDFA 似乎在 iOS 14.4 上完全可以访问,没有警报。我可以用以下命令打印出来:
\nConsole.WriteLine("AdvertisingIdentifier={0}", AdSupport.ASIdentifierManager.SharedManager.AdvertisingIdentifier);\nRun Code Online (Sandbox Code Playgroud)\n并且它\xe2\x80\x99 并不全为零。
\n当 IDFA 仍然可以访问时,如果没有 SKAdNetwork 密钥,我真的会损失广告收入吗?
\nSKAdNetwork 是未来吗?IDFA 是否会被逐步淘汰?那么未来AdMob将根本不再使用IDFA?
\n我应该继续实施 …
过去 6 个月,我在一款新的 iOS 游戏上使用 AdMob 测试广告,效果很好。现在我想发布它,我切换到使用我在 Admob 中设置的实时 AdUnitIds,但它在所有 iOS 设备上失败并出现以下错误:
\n\n\n请求错误:1 没有广告可展示。
\n
发生在这里:
\npublic override void DidFailToReceiveAd(Interstitial sender, RequestError error)\n{\n System.Diagnostics.Debug.WriteLine(\xe2\x80\x9cDidFailToReceiveAd error={0}", error);\n}\nRun Code Online (Sandbox Code Playgroud)\n我正在使用横幅广告和插页式广告,但两者都出现相同的错误。
\n我还有另外两款 AdMob 游戏运行良好。
\n一些观察和想法:
\n有趣的是,如果我将新游戏的 BundleID 更改为其他游戏之一,则实时广告可以正常工作(即使用完全相同的代码和新的 AdUnitID),因此我的代码或 AdUnitID 不会有问题。由于某种原因,它不像我的游戏 BundleID\xe2\x80\x99。
\n是因为新游戏尚未在 App Store 上线(it\xe2\x80\x99s 待开发者发布)吗?我不这么认为,因为实时广告在发布之前确实有效。
\n我的新应用程序不是 \xe2\x80\x9clinked\xe2\x80\x9d 到 AdMob(您可以 \xe2\x80\x99t 链接它,直到它 \xe2\x80\x99s Live),那么它与此相关吗?我再次不这么认为,因为链接并没有产生任何区别(与我过去两年的另外两款游戏相比)
\n我可以在我的 AdMob 帐户中看到有数百个“请求”,但没有“展示次数”(除了我将 BundleID 更改为我上面提到的其他游戏时得到的少数)。
\n所以我一直在等待这款新游戏的发布。也许发布它就会开始广告工作?但如果没有,我的游戏将会在排行榜上飙升,而我\xe2\x80\x99却得不到任何收入!
\n其他人是否也遇到过同样的问题,然后可能在 7 天或 30 …