小编fre*_*742的帖子

WKWebView 未加载 iOS 上的 localhost 提供的 URL

我有一个 iOS 应用程序,它尝试在线程中运行 HTTP Web 服务器,其 UI 由指向该 Web 服务器的单个 WKWebView 组成(即“Electron”风格的应用程序)。但是,我无法让 WKWeView 显示 - 甚至请求-由 Web 服务器提供的内容。

如果我以编程方式在网络服务器上发出 HTTP 请求,应用程序日志将显示正在发出的请求,并且响应负载包含我期望的内容。

http://127.0.0.1:8000但是,如果我尝试在 WKWebView 中加载(或任何其他端口),则不会加载任何 Web 内容。Web 服务器甚至不显示正在发出的请求。

如果我将 webview 指向 HTTPS URL(例如https://google.com/),它会显示预期的内容。

如果我将 webview 指向 HTTP URL(例如http://neverssl.com/),它会显示预期的内容。

我在 WKWebView 上安装了一个导航委托;它表明临时导航已经开始,但没有调用其他加载进度委托方法。

应用程序日志中没有其他错误或进度指示器。大约 30 秒后,我收到日志消息:

[ProcessSuspension] 0x1321c7eb0 - TimedActivity::activityTimedOut:
Run Code Online (Sandbox Code Playgroud)

又过了大约 30 秒,我得到:

2022-10-16 07:54:25.373833-0700 Positron[51762:92124656] [Process] 0x130888218 - [pageProxyID=6, webPageID=7, PID=51772] WebPageProxy::didFailProvisionalLoadForFrame: frameID=3, isMainFrame=1, domain=NSURLErrorDomain, code=-1001, isMainFrame=1
Run Code Online (Sandbox Code Playgroud)

根据错误代码,这似乎是超时。但是,Web 服务器上没有发出任何请求,因此不是 Web 服务器超时。

如果我在 macOS 上使用相同的服务器和 WKWebView …

localhost ios wkwebview

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

如何在iOS设备上诊断dlopen()中的故障

我有一个在iOS应用程序中使用的C库.此库用于dlopen()访问扩展功能.代码在iOS模拟器上工作正常(在32位和64位模式下); 但是,当我在实际的iPhone5s(ARM64)上运行相同的代码时,我收到以下错误:

dlopen(/private/var/mobile/Containers/Bundle/Application/EDEAE282-AE96-45CA-9A4F-D70EE532FB93/foobar.app/lib/time.so, 2): no suitable image found.  Did find:
    /private/var/mobile/Containers/Bundle/Application/EDEAE282-AE96-45CA-9A4F-D70EE532FB93/foobar.app/lib/time.so: mmap() error 1 at address=0x101CE4000, size=0x00004000 segment=__TEXT in Segment::map() mapping /private/var/mobile/Containers/Bundle/Application/EDEAE282-AE96-45CA-9A4F-D70EE532FB93/foobar.app/lib/time.so
Run Code Online (Sandbox Code Playgroud)

据我所知,该文件存在并且正在被成功找到.这也不仅仅是为错误的架构编译的问题; lipo -info报告time.so是:

Non-fat file: time.so is architecture: arm64
Run Code Online (Sandbox Code Playgroud)

file报告time.soMach-O 64-bit bundle.

我有两个问题:

  1. 什么"找不到合适的图像"和"mmap()错误1"错误消息是什么意思?

  2. 我如何纠正(甚至诊断)这里发生的事情?我已经逐步完成了C代码,并且dlopen()调用失败并返回值为NULL,并设置了错误消息,因此单步调试代码不会再向我提供任何信息.

(作为背景, - 我正在尝试将Python移植到iOS;调用dlopen()用于加载本机代码模块.time.so是其中一个模块).

c dlopen ios

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

在第一个手动窗口调整大小之前,自动布局的NSScrollView不会调整大小

我有一个OSX Cocoa应用程序,它是以编程方式构建的(即,不是使用NIB/XIB),我正在尝试使用自动布局进行布局 - 但是当窗口首次显示时,我会得到一些奇怪的行为.

我的主要内容是一个NSView,其中包含100个NSButton作为子视图的集合,垂直布局.这些按钮都相对于NSView和彼此都受到约束; NSView和所有NSButtons都已translatesAutoresizingMaskIntoConstraints=NO设置.我相信内容视图的代码是好的(即没有模糊的布局等),因为如果我将主窗口的contentView设置为NSView,按钮会按预期显示.

但是,如果我将主窗口的contentView设置为NSScrollView,并将NSScrollView的documentView设置为NSView,则会出现显示问题.

在第一次显示时,我得到一个空白窗口 - 没有滚动条,没有:

初始窗口显示

NSScrollView有translatesAutoresizingMaskIntoConstraints=NO.出于调试目的,我还将NSScrollView的背景颜色设置为蓝色,以便我可以确认在哪里布局 - 但是在任何地方都没有显示蓝色.

但是,只要我调整窗口大小,布局就会启动,我会得到一个NSScrollView主窗口的完整大小,蓝色背景和滚动条按预期方式:

窗口调整大小后显示

我已经阅读了一些引用,表明问题是对作为NSScrollView一部分的clipView缺乏约束.在此基础上,我试图建立约束结合[NSScrollView contentView][NSScrollView documentView]在垂直和水平方向(与常数0,乘法器1,在左侧,右侧,顶部和底部).当我这样做时,NSScrollView现在在第一次显示时可见,但它的大小错误.滚动不会滚动内部内容的整个高度 - 可滚动内容会滚动,就好像它与可见窗口的大小相同.最后,内容与窗口的标题栏重叠:

初始显示,带有NSScrollView约束

同样,一旦我调整窗口大小,约束就会启动,窗口会显示为我所期望的(请参阅上一个屏幕截图).所以,我认为额外的限制没有受到伤害,但它们似乎也没有添加任何东西.

更令人困惑的事情 - 如果我完全不使用按钮,只使用没有子视图的空NSView作为内容视图,我会在启动时获得完整的蓝色窗口,正如我所期望的那样.

那么 - 这里发生了什么?感觉我错过了一个强制评估按钮约束的调用; 就是这种情况,或者是其他事情在这里发生了什么?

对于那些感兴趣的人 - 这是我的示例代码.它不是Objective C - 它是Python - 但是语言绑定可以将Python方法名称转换为Objective C消息; 原生ObjectiveC API的映射应该是显而易见的:

app = NSApplication.sharedApplication()
app.setActivationPolicy_(NSApplicationActivationPolicyRegular)

main_window = NSWindow.alloc().initWithContentRect_styleMask_backing_defer_(
    NSMakeRect(100, 100, 640, 480),
    NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask | NSMiniaturizableWindowMask,
    NSBackingStoreBuffered,
    False)

scrollview = NSScrollView.alloc().init()
scrollview.setHasVerticalScroller_(True)
scrollview.setHasHorizontalScroller_(True)
scrollview.setAutohidesScrollers_(True)
scrollview.setBorderType_(NSNoBorder)
scrollview.setTranslatesAutoresizingMaskIntoConstraints_(False)

scrollview.backgroundColor = NSColor.blueColor()

container = NSView.alloc().init() …
Run Code Online (Sandbox Code Playgroud)

cocoa nsscrollview autolayout

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

标签 统计

ios ×2

autolayout ×1

c ×1

cocoa ×1

dlopen ×1

localhost ×1

nsscrollview ×1

wkwebview ×1