小编Fra*_*ock的帖子

Xcode 9 - 模拟器:截取的屏幕截图不是ItunesConnect/AppStore Connect的正确分辨率

在旧版本的Xcode Simulator(Xcode 8)中,你可以按下Command + 1,它会显示模拟器的最大尺寸(100%),即使它涉及它扩展到可见的屏幕空间.然后,您可以按Command + S并从任何模拟器截取屏幕截图,并将其直接用于应用商店.(这将是正确的解决方案).我为iPad Pro 12.9"和iPhone 6s Plus做了这个,快速填写我的截图部分.

现在,在Xcode 9中,这不再适用.我尝试了所有选项:手动调整大小,设置为100%,放大/缩小等.所有选项都不允许我将模拟器扩展到屏幕的可见范围之外.它不会让你拖过角落的边界.所以当你按COMMAND + S来截取屏幕截图时,它会比ItunesConnect需要的更低.

那么我们现在如何才能使用模拟器截取屏幕截图,并让它们可以用于具有正确分辨率的商店?

screenshot simulator itunesconnect ios11 xcode9

29
推荐指数
1
解决办法
8621
查看次数

iOS9 - UITableViewCellContentView掩盖了Cell内部的控件

我做了一个名为"SwitchCell"的自定义UITableViewCell,它有一个开关.仅在iOS9中,使用Xcode 7 beta,单元格中的内容视图位于交换机顶部.(请参阅视图层次结构的屏幕截图.您可以清楚地看到单元格的内容视图位于其他视图之上.): 在此输入图像描述

因此,UISwitch的所有触摸都被截获,IBAction也不会触发.在iOS8中,这不是问题.查看iOS 8.4模拟器的屏幕截图.您可以看到控件顶部没有内容视图: 在此输入图像描述

有谁有这个问题?我尝试从头开始重新构建NIB,但是会出现相同的结果.

我的NIB是一个自由格式的视图,没有状态栏.它有两个出口:一个用于UILabel,一个用于UISwitch.

编辑:请确保检查下面的答案,要求验证单元格的根视图不仅仅是一个UIView而是一个UITableViewCell.这个问题也可能是一个副作用.

objective-c uitableview nib ios9 xcode7

15
推荐指数
1
解决办法
1668
查看次数

Xcode 10:代码签名我的App + Framework失败,因为签署第三方依赖框架(PromiseKit)失败.适用于Xcode 9

我有一个Xcode 10 - iOS12 swift项目,链接到我自己的框架(也是Xcode 10 + iOS12).

应用程序项目将我的框架项目作为子项目引用引用.

My Framework项目引用了PromiseKit.framework(一个通用框架 - 胖库),使用以下构建脚本制作:

# Merge Script

# 1
# Set bash script to exit immediately if any commands fail.
set -e

# 2
# Setup some constants for use later on.
FRAMEWORK_NAME="PromiseKit"

# 3
# If remnants from a previous build exist, delete them.
if [ -d "${SRCROOT}/build" ]; then
rm -rf "${SRCROOT}/build"
fi

# 4
# Build the framework for device and for simulator (using
# all needed architectures). …
Run Code Online (Sandbox Code Playgroud)

xcode frameworks code-signing swift xcode10

12
推荐指数
1
解决办法
3007
查看次数

iOS9:UIDatePicker与datePickerMode的UIDatePickerModeTime只显示小时,没有分钟

我正在使用Xcode beta 7和iOS9模拟器.使用带有UIDatePickerModeTime的datePickerMode的UIDatePicker只显示小时数,而不是分钟数.

看截图:

在此输入图像描述

在iOS 7和8上,显然它按预期工作,并显示小时和分钟.截图:

在此输入图像描述

我真的不想重新发明轮子并滚动我自己的时间选择器.关于为什么会发生这种情况以及如何解决的任何想法?我在谷歌上找不到任何东西.

谢谢,亚历克斯

xcode uidatepicker uidatepickermodetime ios9 xcode7

10
推荐指数
2
解决办法
6228
查看次数

XCTest:NSURLSession:在主线程上停止

运行执行网络操作的XCTest时,我收到以下错误:

-waitForExpectationsWithTimeout:超时但无法运行超时处理程序,因为主线程没有响应(等待超时后允许0.5秒).可能导致此问题的条件包括处理主线程上的IO,调用sleep(),死锁和同步IPC.Xcode将尝试重新启动该过程并继续下一个测试......

我有一个测试执行网络命令方法,该方法使用NSURLSession.

此测试是具有4个连续网络请求测试的测试类的一部分.

当独立于其他测试运行时,它每次都成功.运行整个Test文件(总共4个测试)时,每次都会成功.

但是当运行整个测试套件(50次测试)时,我在第一次网络操作测试中得到"Stall on main thread".其他3个网络运行测试都很顺利.

这是测试的代码:

- (void)test_session_001_ObtainsSessionObjectFromServer
{
    XCTestExpectation *expectation = [self expectationWithDescription:[self description]];

    id<IPVideoSessionProtocol> provider = [IPVideoSessionFactory getProvider];

    [provider createVideoSessionWithUserID:@"SomeUserID"
        withCompletionBlock:^(IPVideoSession *session) {

        if ([session isKindOfClass:[IPVideoSession class]] &&
            [session.sessionID isKindOfClass:[NSString class]] &&
            session.sessionID.length > 0) {

            // The returned session ID is populated
            [expectation fulfill];
        }
    }];

    [self waitForExpectationsWithTimeout:5.0f handler:^(NSError *error) {
        if (error)
        {
            XCTFail(@"IPVideoSessionManagerTests Did not execute in allotted time");
        }
    }];
}
Run Code Online (Sandbox Code Playgroud)

createVideoSession里面的代码......

- (void)createVideoSessionWithUserID:(NSString*)userID
    withCompletionBlock:(IPVideoSessionCompletionBlock)block
{
    IPCreateVideoSessionCommand* command = [[IPCreateVideoSessionCommand …
Run Code Online (Sandbox Code Playgroud)

xcode asynchronous timeout xctest nsurlsession

9
推荐指数
0
解决办法
1938
查看次数

DialogFlow Webhook API V2 - 如何获取授权用户的accessToken?

在我的DialogFlow V1 Webhook中,我曾经获得过这样的用户访问令牌(node.js):

exports.voxGoogleHomeWebhook = functions.https.onRequest((req, res) => {    
  const app = new WebhookClient({request: req, response: res});    
var accessToken = app.getUser().accessToken   
Run Code Online (Sandbox Code Playgroud)

这在DialogFlow V2中不起作用. getUser()在WebhookClient实例上不可用.

我在他们的文档中找不到如何获取登录用户的accessToken:https://dialogflow.com/docs/fulfillment

我尝试了app.session,但这只是用户会话的唯一会话字符串标识符.这不是他们的访问令牌.

如何在V2中获取accessToken?

actions-on-google google-home dialogflow-es

6
推荐指数
1
解决办法
1588
查看次数

无法在 UITabBarItem 上启用字母间距(字距调整)

我正在尝试在 UITabBarItem 标题标签上启用文本字距调整(增加字母间距)。但是为 UITabBarItem 提供 NSKernAttributeName 属性没有任何区别。然而,其他两个属性正在起作用:NSForegroundColorAttributeName、NSFontAttributeName。我已经尝试过系统字体和另一种字体:SFUIDisplay-Regular。

是的,我也尝试使用 UIControlStateNormal 和 UIControlStateSelected。

这是代码:

for (UITabBarItem *item in self.tabBar.items)
{
[item setTitleTextAttributes: @{
                    NSKernAttributeName: @(4.0f), /* does nothing */
                    NSForegroundColorAttributeName: [AppStyle whiteColor],
                    NSFontAttributeName: font
                }
                forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

NSKernAttributeName 属性没有任何效果。

当应用程序加载时,我也尝试在 Appearance 中执行此操作,如下所示:

    NSDictionary *attributes = @{
                             NSKernAttributeName: @(4.0f) /* does nothing */
                             };
[[UITabBarItem appearance] setTitleTextAttributes: attributes
                                         forState: UIControlStateNormal];
[[UITabBarItem appearance] setTitleTextAttributes: attributes
                                         forState: UIControlStateSelected];
Run Code Online (Sandbox Code Playgroud)

这也什么都不做。

我能够让 NSKernAttributeName 工作的唯一地方是在 UILabel 上使用 setAttributedText 时。

你们知道为什么设置其他标题文本属性适用于 UITabBarItem,但 NSKernAttributeName 不适用吗?

objective-c nsattributedstring kerning uitabbaritem letter-spacing

5
推荐指数
1
解决办法
908
查看次数

Apple iMessage Extension API.检测收件人是否正在使用iMessage

是否可以从iMessage应用程序扩展中检测(以编程方式):从发件人方:您正在与之交谈的人是否在他们的终端使用iMessage,或者他们是SMS/MMS用户(例如Android或Windows手机)

基本上我需要根据他们是否能够呈现完全丰富的体验或最小化的子集来定制我的交付体验.

例如,对于iMessages,我实际上想要提供内嵌视频.对于MMS/SMS,我可能只想显示图像,或者甚至只显示链接,以避免收件人的短信/彩信费用.

ios imessage swift imessage-extension

5
推荐指数
1
解决办法
531
查看次数

iMessage 扩展:根导航控制器导致所有委托方法都不会在我的 MSMessagesAppViewController 中调用

我有一个新的 iMessage 扩展项目,我尝试了两种构建导航堆栈的方法:

  1. 在我的故事板中,我将入口点设置为 UINavigationController,它以我的 MSMessagesAppViewController 作为根控制器。

  2. 或者我直接将我的 MSMessagesAppViewController 设置为我的故事板中的入口点。(没有拥有它的 UINavigationController)。

对于上面的场景 #1,导航控制器工作正常,我可以在堆栈上推送新屏幕。(除了整个导航栏隐藏在展开视图中,这是一个我仍然需要弄清楚的单独问题)。但是,使用此配置调用我的 MSMessagesAppViewController 的任何委托方法都没有。如:willTransitionToPresentationStyle didTransitionToPresentationStyle、willBecomeActiveWithConversation、didSelectMessage(这些都没有被调用)

对于上面的场景#2,确实会调用 MSMessagesAppViewController 方法。(因为 UINavigationController 不是 Storyboard 中的入口点)。

所以我的问题是:如何让 UINavigationController 位于我的 iMessage 扩展应用程序的根目录,以便我可以执行推送导航,但同时调用 MSMessagesAppViewController 的方法,如 Apple API 所述?

iphone objective-c ios imessage imessage-extension

5
推荐指数
1
解决办法
564
查看次数

DialogFlow V2 Webhook - 在异步请求之后立即预测语音响应

我有一个DialogFlow V2 node.js webhook.

我有一个用webhook动作调用的意图:

const { WebhookClient } = require('dialogflow-fulfillment');
const app = new WebhookClient({request: req, response: res});

function exampleIntent(app) {

   app.add("Speak This Out on Google Home!");   // this speaks out fine. no error. 
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我有一个成功完成的异步请求,并且我在成功块中执行app.add,如下所示:

 function exampleIntent(app) {  
      myClient.someAsyncCall(function(result, err) {
          app.add("This will not be spoken out");  // no dice  :(
      }
      // app.add("but here it works... so it expects it immediately");
  }
Run Code Online (Sandbox Code Playgroud)

...然后Dialog Flow不会等待语音返回.我在Response对象中得到错误:

  "message": "Failed to parse Dialogflow response into AppResponse, exception …
Run Code Online (Sandbox Code Playgroud)

node.js actions-on-google api-ai dialogflow-es

5
推荐指数
1
解决办法
4435
查看次数

具有二级子域的 iOS 通用链接不会深层链接到本机应用程序,但在一级子域(同一主机)上的深层链接很好

我的应用程序中有包含多个应用链接的功能:条目如下:

applinks:firstlevel.domain.com
applinks:second.level.domain.com
Run Code Online (Sandbox Code Playgroud)

一级子域上的通用链接工作正常并打开应用程序。二级子域上的通用链接不会打开应用程序(转到 safari)。我现在怀疑是因为复合(2 件)子域。

apple-app-site-association 文件在两者上完全相同,并且可以从两者托管和下载。这两个 URL 都可以从我们的内部网络中访问,并且位于相同的域和 TLD 中。SSL 配置正确。没有发生重定向(通过 chrome 开发工具验证)

每个相应的apple-app-site-association文件都托管在适当的子域下(不在 domain.com 的根目录下)。但是相同的顶级域用于 URL 1 和 2 中的两个子域

二级子域可能是问题所在,还是其他网络配置差异更有可能是问题所在?我在网上找不到说明通用链接是否支持多个子域的信息。

更新:尝试删除 applinks:firstlevel.domain.com 条目,以确保两个子域对于相同的捆绑 ID(和站点关联)不会发生冲突。这并没有什么不同。二级子域仍然没有深度链接。

关于如何诊断为什么第二个 URL 无法作为应用程序中的深层链接打开的任何建议?

使用通配符或将 apple-app-site-association 文件上传到域的根目录也是不合适的,因为这是生产环境,不应该有任何较低的环境设置。

这是我们的 apple-app-site-association 文件:

{
    'webcredentials': {
        'apps': ['ourteamid.ca.ourdomain.ourname']
    },
    'applinks': {
        'apps': [],
        'details': [{
            'appID': 'ourteamid.com.ourdomain.ourname1.ourname2',
            'paths': ['r/samplepath/*', 'en/r/samplepath/*', 
'fr/r/samplepath/*']
        }]
    }
}
Run Code Online (Sandbox Code Playgroud)

ios ios-universal-links

5
推荐指数
1
解决办法
936
查看次数

iOS11 ARKit:ARKit还可以捕获用户脸部的纹理吗?

我上下阅读了所有ARKit类的完整文档.我没有看到任何描述实际获取用户面部纹理的能力的地方.

ARFaceAnchor包含ARFaceGeometry(由顶点组成的拓扑和几何)和BlendShapeLocation数组(允许通过操纵用户面顶点上的几何数学来操纵各个面部特征的坐标).

但是我在哪里可以获得用户脸部的实际纹理.例如:实际的肤色/肤色/纹理,面部毛发,其他独特的特征,如疤痕或出生痕迹?或者这根本不可能?

ios ios11 arkit iphone-x

4
推荐指数
2
解决办法
2050
查看次数

将 Swift 类标记为 Final 是否也会使所有包含的 var、let 和函数自动获得静态调度的好处?

我正在努力从我的应用程序中榨取最后一点性能。我尝试尽可能使用结构而不是类(无状态共享、默认直接调度等)。但我的视图控制器和 UIView 对象显然仍然是类。出于性能原因,我想强制直接调度我的每一个方法和数据成员。

\n\n

我是否仍然需要在类中标记每个varletfunc为Final,还是只需将托管类标记为 Final 就足够了,以便其下面的所有内容都可以利用直接方法分派

\n\n

换句话说:在每个方法和变量之前粘贴 Final 是非常乏味的。所以我希望将它放在类本身上具有强制直接调度所有类成员的相同效果。但我不知道如何测试或验证它。

\n\n

对于那些想知道我在说什么的人,请查看这篇文章:“Swift 中的方法调度”。默认情况下,结构和协议扩展为您提供静态方法分派(性能最快),但类则不然。类中的静态方法可以,但我想对所有实例方法和数据成员强制静态调度。
\n https://www.raizlabs.com/dev/2016/12/swift-method-dispatch/

\n\n

swift 语言运行时文档提到了对子类化能力的影响,但没有描述标记为“final”的类的子成员和函数的分派行为会发生什么。如果下面的所有内容都获得静态方法调度而不必单独将所有内容标记为最终版本,那就太好了。

\n\n
\n

最终的

\n\n

将此修饰符应用于类或类的属性、方法或下标成员。它应用于一个类以指示该类不能被子类化。它应用于类的属性、方法或下标,以指示类成员不能在任何子类中被覆盖。有关如何使用 Final 属性的示例,请参阅防止覆盖。

\n
\n

performance final method-dispatch dispatch swift

3
推荐指数
1
解决办法
786
查看次数