小编bch*_*mes的帖子

使用带有UIWebView和POST请求的自定义NSURLProtocol

在我的iOS应用程序中,我使用的是UIWebView和自定义协议(使用我自己的NSURLProtocol实现).我一直非常小心确保每当我加载一个url时,我将这样的内容加载到我的UIWebView中:

myprotocol:// MYSERVER/mypath中

在我的NSURLProtocol实现中,我获取NSURLRequest的可变副本,将URL转换为http:并将其发送到我的服务器.

一切都适用于HTTP GET请求.我遇到的问题是POST请求.如果请求使用我的自定义协议,似乎UIWebView没有正确编码HTTPBody中的表单数据.

一个解决方法,因为我使用HTTPS来处理我的服务器请求,就是我注册我的协议处理程序来拦截http:而不是myprotocol:我可以将所有调用转换为https:这个其他问题,在这里,我指向了解:

但我想知道是否有任何替代和/或更好的方式来实现我想要的东西.

iphone uiwebview nsurlprotocol ios

10
推荐指数
1
解决办法
7755
查看次数

JavaScript算法确定平板电脑的方向

我们正在构建一个针对平板电脑开发的HTML5/JavaScript应用,我们希望在横向和纵向方面对屏幕进行不同的布局.

最初,我们正在捕捉方向变化通知,并跟踪当前方向(通常报告为0,90,-90或180度 - 请参阅此问题).不幸的是,不同的设备将不同的方向报告为"0".该链接认为这是一个错误,但有一些证据证明这是按设计工作的 - 例如,本文建议"横向"是默认方向,并且这些设备在横向保持时会报告方向为"0"模式.

我们接下来试着只看实际的屏幕尺寸,假设当宽度大于高度时,我们处于横向模式.但是当显示屏幕键盘时,此算法会混淆 - 当显示键盘时,将返回可见区域的尺寸.严格来说,当设备处于纵向模式时,但是屏幕未被键盘遮挡的部分比它高.

这个问题的回答很古老.这仍然是最好的答案吗?有没有人有一个好的算法,考虑键盘可见性?

javascript android

8
推荐指数
1
解决办法
2238
查看次数

阅读iOS Webkit崩溃堆栈跟踪

我有一个非常粗糙的技术问题,我希望可能会有一些Webkit专家.我正在为客户端开发iOS应用程序.大多数应用程序是在UIWebView控制器中提供的HTML5内容.

大约一周前,QA团队开始报告应用程序崩溃.我们上周一天收到大约1份崩溃报告.不幸的是,它们是一种崩溃,在这种情况下,无法确定可以始终如一地重现崩溃的明确步骤.奇怪的是,其中一些崩溃报告一直在使用旧版本的iOS代码库 - 几个月来成功运行的代码,没有人注意到这种崩溃行为.

但是所有崩溃情况的共同之处在于它们都是针对提供最新版HTML网页应用页面的更新后端运行的.所以我们似乎已经在服务器端做了一些新的东西,它会触发iOS代码中的某些东西崩溃.

崩溃日志非常一致.这是符号化的日志:

0   WebCore    0x33147ab0 WebCore::FrameLoader::cancelledError(WebCore::ResourceRequest const&) const + 4
1   WebCore    0x33070fbe WebCore::ResourceLoader::init(WebCore::ResourceRequest const&) + 166
2   WebCore    0x33070e66 WebCore::SubresourceLoader::startLoading() + 14
3   WebCore    0x33070c4e WebCore::ResourceLoadScheduler::servePendingRequests(WebCore::ResourceLoadScheduler::HostInformation*, WebCore::ResourceLoadPriority) + 46
4   WebCore    0x33076508 WebCore::ResourceLoadScheduler::servePendingRequests(WebCore::ResourceLoadPriority) + 36
5   WebCore    0x32fd38c8 WebCore::ThreadTimers::sharedTimerFiredInternal() + 92
Run Code Online (Sandbox Code Playgroud)

(在WebCore中讨论崩溃的大多数问题的答案是建议你在dealloc方法中将webview.delegate设置为nil.这似乎不是我们的问题).

现在我有一个理论(我将在稍后讨论),但我没有的是明确的证据.所以我抓住了webkit.org的源代码,并试图阅读足够的内容来了解​​WebKit在崩溃时正在做什么.我不认为我使用的是与iOS设备完全相同的WebKit源版本(我们在5.0.1和5.1.1设备中看到过这一点),关键方法似乎似乎引用了下载资源(如CSS和图像)但似乎涉及到一个空URL,所以我们最终调用cancelledError方法.

然后FrameLoader执行此操作:

ResourceError FrameLoader::cancelledError(const ResourceRequest& request) const
{
    ResourceError error = m_client->cancelledError(request);
    error.setIsCancellation(true);
    return error;
}
Run Code Online (Sandbox Code Playgroud)

并且在这种方法中应用程序崩溃:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000008
Run Code Online (Sandbox Code Playgroud)

这告诉我m_client没有指向有效的东西.

现在,我确实有一个关于发生了什么的理论,只是基于直觉和间接证据.

我们的UIWebView有一个委托,用于评估加载到Web视图中的URL.在某些情况下,我们决定在单独的ViewController中启动新的URL,如下所示:

- (BOOL)webView:(UIWebView *)source shouldStartLoadWithRequest:(NSURLRequest …
Run Code Online (Sandbox Code Playgroud)

webkit uiwebview ios

7
推荐指数
1
解决办法
1732
查看次数

使用 docker.sock 在 Kubernetes 上托管 Jenkins

我正在尝试在 GKE 上托管 Jenkins 映像以运行构建。大多数情况下,我已经按照Google 的教程在 Kubernetes 中设置 Jenkins。我有一个相当基本的设置,有一个运行构建的主节点。

我还希望能够在 Jenkins 环境中使用 Docker,因此我进入了 Jenkins 的全局工具配置并添加了一个 Docker 实例。我还在部署文件中映射了 docker.sock 以绕过“无法连接到 unix:///var/run/docker.sock 上的 Docker 守护进程。docker 守护进程是否正在运行?” 问题。

我当前的部署如下所示:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: jenkins
  namespace: jenkins
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: master
    spec:
      containers:
      - name: master
        image: jenkins/jenkins:2.95
        ports:
        - containerPort: 8080
        - containerPort: 50000
        readinessProbe:
          httpGet:
            path: /login
            port: 8080
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 2
          failureThreshold: 5
        env:
        - name: JENKINS_OPTS
          valueFrom:
            secretKeyRef:
              name: …
Run Code Online (Sandbox Code Playgroud)

jenkins docker kubernetes

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

UITabBar专注于移动tvOS上的视图布局

Apple AppleTV应用程序(如电影和电视节目)的常见行为之一是它们以可见的UITabBar开头,并且所有视图的内容都在标签栏下方的空间中呈现.一旦焦点从标签栏移动到屏幕上的某些内容,标签栏就会从屏幕顶部滑出,内容会向上移动/向上滚动以填充现在可用的空间.如果标签栏重新出现,此过程将自行反转.

有没有一种简单的方法来完成这种行为(如复选框或其他东西?),或者我必须didUpdateFocusInContext:withAnimationCoordinator:在各个地方实现该方法,并手动调整框架或滚动内容或东西?

focus uitabbarcontroller apple-tv tvos

4
推荐指数
1
解决办法
1315
查看次数

Jenkins Pipeline Build with Docker,Google Registry和Google Auth Plugin

我正在使用Jenkins管道构建Docker镜像(使用由JHipster自动生成的管道脚本).我想将最终的docker镜像推送到Google Container Registry.

这就是我所做的:

  1. 我已经安装了CloudBees Docker自定义构建环境插件和Google容器注册表Auth插件.
  2. 我已按照此处的说明在Jenkins中设置了Google身份验证凭据
  3. 我已将构建步骤配置为使用Google注册表标记格式,如下所示: docker.build('us.gcr.io/[my-project-id]/[my-artifact-id]', 'target/docker')
  4. 我在推送步骤中引用了我的Google Auth凭据的ID:

(嗯.在子弹正确格式化后需要额外的文本行)

docker.withRegistry('https://us.gcr.io', '[my-credential-id]') {
    dockerImage.push 'latest'
}
Run Code Online (Sandbox Code Playgroud)

但是构建失败了:

ERROR: Could not find credentials matching [my-credential-id] 
Finished: FAILURE
Run Code Online (Sandbox Code Playgroud)

我基本上认为这些插件在管道世界中不起作用,但我想我会问是否有人完成了这个并且可以给我一些指示.

docker google-container-registry jenkins-pipeline

4
推荐指数
1
解决办法
6260
查看次数

Cloud SQL 代理和权限不足

我正在尝试在 Google 的容器引擎 (GKE) 上部署我的 Spring Boot/JHipster 应用程序。我已经弄清楚了大部分事情,但是我的数据库实例(一个在 Google Cloud SQL 上运行的 PostgreSQL 实例,带有 Google SQL 代理)有问题。

我已按照此处此处的说明设置我的应用程序。

  1. 我已经在云中设置了我的 PostreSQL 实例,并创建了我的应用程序的数据库和用户。
  2. 我创建了一个具有 Cloud SQL 客户端角色的 SQL 服务——我获取了 JSON 密钥,并用它来创建我的 cloudsql-instance-credentials。我还创建了我的 cloudsql-db-credentials。
  3. 我已将其他位添加到我的部署 yaml 文件中。我基本上从这个 GitHub 示例中克隆了 yaml 文件,并用我自己的 Docker 镜像(托管在 Google Container Registry 中)替换了对 wordpress 的所有引用。我还更新了代理块,如下所示:

deployment.yaml 片段:

  - image: gcr.io/cloudsql-docker/gce-proxy:1.09
      name: cloudsql-proxy
          command: ["/cloud_sql_proxy", "--dir=/cloudsql",
                    "-instances=[my-project]:us-central1:[my-sql-instance-id]=tcp:5432",
                    "-credential_file=/secrets/cloudsql/credentials.json"]
Run Code Online (Sandbox Code Playgroud)

最后,我更新了我的 Spring Boot 配置 yaml 文件,如下所示:

datasource:
    type: com.zaxxer.hikari.HikariDataSource
    url: jdbc:postgresql://google/[my-database]?socketFactory=com.google.cloud.sql.postgres.SocketFactory&socketFactoryArg=[my-project]:us-central1:[my-sql-instance-id]
    username: ${DB_USER}
    password: ${DB_PASSWORD}
Run Code Online (Sandbox Code Playgroud)

当 …

java google-cloud-sql spring-boot kubernetes google-kubernetes-engine

4
推荐指数
1
解决办法
2049
查看次数