标签: swift5

更新到Xcode 10.2 / Swift 5后无法构建macOS项目

在更新Xcode之前,我的项目构建良好。

但是现在,我无法再构建该项目。使用Swift 5时,构建项目永远不会完成。它停止在“构建70个100任务”中,并且永远不会完成。这些数字也不总是相同的,但是它永远不会完成。

如果我尝试使用Xcode将项目从Swift 4.2转换为Swift 5,它同样也不会完成转换。

如果我尝试更改工具链以使用Swift 4.2.1版本的工具链,则代码可以成功编译,但是在运行时我会立即崩溃:

dyld: Symbol not found: _$SBOWV
  Referenced from: /Users/compc/Library/Developer/Xcode/DerivedData/Swift_Coder-hczsehpbafcwkfgwyameucznmhsp/Build/Products/Debug/Swift Coder.app/Contents/MacOS/../Frameworks/SavannaKit.framework/Versions/A/SavannaKit
  Expected in: /usr/lib/swift/libswiftCore.dylib
 in /Users/compc/Library/Developer/Xcode/DerivedData/Swift_Coder-hczsehpbafcwkfgwyameucznmhsp/Build/Products/Debug/Swift Coder.app/Contents/MacOS/../Frameworks/SavannaKit.framework/Versions/A/SavannaKit
Run Code Online (Sandbox Code Playgroud)

我尝试清理项目并删除派生数据,但似乎都无法正常工作。

如果使用Xcode 10.1,则该项目将继续构建并正常运行。

xcode swift swift5

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

警告:非特定平台“ *”的“可用”属性中的版本号超出预期

我有这段代码:

@available(*, deprecated:3.0, message:"Use activate().")
public func install() {
    self.activate()
}
Run Code Online (Sandbox Code Playgroud)

而且由于我已经升级到swift5xcode 10.2,所以我得到以下警告:

非特定平台“ *”的“可用”属性中的版本号超出预期

并固定为:

将':3.0'替换为''

这是什么警告?它说什么?

ios swift snapkit swift5 xcode10.2

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

使用Xcode 10.2 + iOS 12.2的iOS应用缓慢启动

我有一个非常奇怪的问题,似乎是由最新的Xcode 10.2编译引起的。

我注意到我的应用启动时间变得非常糟糕(慢了3倍),这仅是由于使用Xcode 10.2(.x)构建并在iOS 12.2上运行而引起的。当在较旧的iOS(12.0)上运行或使用针对iOS 12.2的Xcode 10.1编译时,相同的代码修订版可以正常运行。

延迟甚至发生在main()被调用之前。从根本上说Bootstrapping com.myapp.something with intent foreground-interactive,控制台说出与main()被叫之间的延迟是所测量的时间开始增加的地方。

应用设置(快速):

  • 混合目标Swift + Obj-C
  • 使用内部框架进行代码分离
  • 在框架上使用CocoaPods(1.5.3)
  • 在运行时加载了约35个内部框架(内部+主要是CocoaPods)

这是发生了什么

旧代码修订版(Swift 4.2)-较旧的版本之一,可以正常工作,然后使用Xcode 10.1进行编译

该表显示了使用Xcode 10.2进行编译对应用启动时间(开始出现状态栏的第一帧的那一刻)的影响。

|            | iOS 12.0 | iOS 12.2 |
|------------|----------|----------|
| Xcode 10.1 |       1x |    1.25x |
| Xcode 10.2 |       1x |       3x | <-- 
Run Code Online (Sandbox Code Playgroud)

上次OK发行版(iOS 12.0 / Xcode 10.1)的启动时间被认为是1倍,其余时间是相对于它的。我们在这里谈论秒(减去3s->接近9s)。

仅在全新安装时才会发生此重大延迟。随后的每次启动都很快。

最新代码(Swift 5) -所有代码均已迁移到Swift 5,所有CocoaPods已更新为最新的Swift 5兼容版本,项目已更新为Xcode 10.2设置

与Swift 5之前的情况非常相似。因此,Swift 5本身似乎不是问题。


编辑1:

时间分析器发现初始化时间大大变慢了。 …

ios swift ios12 swift5 xcode10.2

5
推荐指数
0
解决办法
288
查看次数

无法锁定IOS10中一个视图控制器的旋转

背景

我有一个使用AVFoundation的应用程序以拥有自定义相机。这发生在中OCRViewController。当我拍照时,会将捕获的图片发送到其他视图ImagePreviewViewController

我使用Xcode 10.2.1 (10E1001)Swift 5

目标

我想实现的是将的方向锁定ImagePreviewViewController为图像的原始方向。我已经知道如何获取图像的方向,但是我无法锁定视图的方向。

我得到这样的图像旋转: let imageOri = capturedImage?.imageOrientation

我尝试了什么?

我尝试了其他来源的公认答案:

如何仅为一个视图控制器锁定方向?

如何仅在Swift中将一个视图控制器的方向锁定为纵向模式

https://www.hackingwithswift.com/example-code/uikit/how-to-lock-a-view-controllers-orientation-using-supportedinterfaceorientations

https://developer.apple.com/documentation/uikit/uiviewcontroller#//apple_ref/occ/instm/UIViewController/supportedInterfaceOrientations下的“ 处理视图旋转 ” 下阅读文档,内容如下:

在编写此查询时,我还尝试了许多建议的解决方案,但是,大多数方法似乎使用以下方法(或它的一种变体),它对我不起作用。

override func supportedInterfaceOrientations() -> Int {
    return Int(UIInterfaceOrientationMask.Portrait.rawValue)
}

override func shouldAutorotate() -> Bool{
    return false
}

override func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation {
    return UIInterfaceOrientation.Portrait
}
Run Code Online (Sandbox Code Playgroud)

从iOS 8开始,不推荐使用所有与旋转相关的方法。相反,旋转被视为视图控制器视图大小的变化,因此使用viewWillTransition(to:with :)方法进行报告。

但是,我不确定如何从这里开始。

有趣的代码片段

我的中使用了以下方法OCRViewController,在此实例化ImagePreviewViewController并附加捕获的图像。

func displayCapturedPhoto(capturedPhoto : UIImage) {
    let imagePreviewViewController = storyboard?.instantiateViewController(withIdentifier: "ImagePreviewViewController") …
Run Code Online (Sandbox Code Playgroud)

xcode uiviewcontroller swift ios10 swift5

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

线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x48)-与iOS13.1(开发版本2)一起损坏

因此,昨天我将iPhone 6S更新为iOS13.1的第​​二个开发版本,突然间我的应用程序(在应用程序商店中显示为0崩溃显示在Connect应用程序上)在我的设备上运行时不起作用。但是,它确实可以在Xcode的模拟器中使用。我使用的是Xcode 10.3,但Xcode 11 Beta的功能相同,模拟器也可以在Beta上运行(尽管它们以其他方式破坏了我的应用程序)。

当我点击一个按钮时,应该使我进入所点击按钮的详细视图,但我收到此错误:

Thread 1: EXC_BAD_ACCESS (code=1, address=0x48)
Run Code Online (Sandbox Code Playgroud)

这段代码在哪

// sets up the audio for use in the app --------------------------------------------------------------//
        let GetReady = Bundle.main.path(forResource: “Get_Ready_up9db”, ofType: “m4a”)
        // this tells the compiler what to do when action is received
        do {
            audioPlayer_GetReady = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: GetReady! )) // Thread 1: EXC_BAD_ACCESS (code=1, address=0x48)
            try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category(rawValue: convertFromAVAudioSessionCategory(AVAudioSession.Category.ambient)))
            try AVAudioSession.sharedInstance().setActive(true)
        }
        catch{
            print(error)
        }
Run Code Online (Sandbox Code Playgroud)

我不知道为什么突然这么做,但是因为我不知道为什么,我有点害怕,因为我确定iOS 13很快就会问世。

请帮忙!

iphone swift5 ios13

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

当应用程序在后台运行时,约束会重置-iOS 13

我通常设置视图的前导,尾随约束。我将其高度设置为静态325。对于底部约束,我设置了2个约束1.将主视图的底部约束设置为视图的底部约束。2.用主视图的底部约束到视图的顶部约束。现在,根据用户的操作,我只显示带有动画的隐藏视图。因此,当视图显示在屏幕上且应用程序进入后台时,视图的约束条件将自动更改,视图将被隐藏。仅在iOS 13设备中会发生此问题。

我尝试更新其对viewWillAppear()的约束,但是在iOS 13中,当从后台激活应用程序时,也不会调用ViewControllers的viewWillAppear。我也不认为,这是更新约束的好主意。

故事板

类文件

class ViewController: UIViewController {

    @IBOutlet weak var topConstraint: NSLayoutConstraint!
    @IBOutlet weak var bottomConstraint: NSLayoutConstraint!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(true)
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) {
            self.topConstraint.isActive = false
            self.bottomConstraint.isActive = true
            UIView.animate(withDuration: 0.3) {
                self.view.layoutIfNeeded()
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当应用程序状态从前台更改为后台时,我不想更改或更新约束,反之亦然。

请同样帮我。

TIA

iphone ios swift swift5 ios13

5
推荐指数
4
解决办法
286
查看次数

如何调整 UIHostingController 的大小以包装它的 SwiftUI 视图?

我有一个基本的 SwiftUI 组件。

struct PopupModal: View {
    var body: some View {
        Text("Hello, World!")
    }
}

struct PopupModal_Previews: PreviewProvider {
    static var previews: some View {
        PopupModal()
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个UIViewController我想实例化这个组件并显示它。

    private let _popup = PopupModal()
    private lazy var _popupController = UIHostingController(rootView: _popup)

    override public func viewDidLoad() {
        // ...
        self.addChild(_popupController)
        view.addSubview(_popupController.view)
        _popupController.didMove(toParent: self)

    }

    override public func viewDidLayoutSubviews() {
        // How do I make this automatic or as a function of the size of _popup?
        let popupHeight = …
Run Code Online (Sandbox Code Playgroud)

uikit ios swift5 swiftui

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

如何使用 addObserver 关闭方法在 Swift 5 中删除观察者

这是我的第一篇文章。我是日本的 iOS 工程师(这个月刚入职)。

我在 Swift 5 中的removeObserver方法有问题NotificationCenter

我使用闭包类型向 ViewController (VC) 添加了观察者addObserver。当 VC 的取消初始化调用时,我想删除这个观察者。

NotificationCenter.default.removeObserver(self)用VC的deinit方法写的。但是,这似乎对我不起作用。

有什么问题???

此外,如果我的代码有内存泄漏问题,请告诉我如何修复它。

这是我的一段代码。

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        NotificationCenter.default.addObserver(forName: UIApplication.didBecomeActiveNotification, object: nil, queue: nil) { [weak self] notification in

            guard let self = self else { return }
            self.loadWeather(notification.object)
        }
    }
    
    deinit {
        print(#function)
        print("ViewController died")

        NotificationCenter.default.removeObserver(self)
    }
}
Run Code Online (Sandbox Code Playgroud)

memory-management nsnotificationcenter ios swift swift5

5
推荐指数
2
解决办法
4061
查看次数

如何检测 iOS 14 中是否授予本地网络权限

如何检测用户是否已在 iOS 14 的应用程序中授予本地网络权限?如果用户拒绝权限并重定向到操作系统设置以授予权限,我必须显示错误屏幕。Apple 是否提供了任何方法来查找位置权限?

swift5 ios14 xcode12

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

在 Xcode 12 中调试和运行 PO 命令时抛出错误

当我在模拟器或设备上运行应用程序并尝试在调试期间使用 PO 命令时。Xcode 抛出错误而不是打印值。这是在我更新 Xcode 12 之后发生的。

错误:虚拟文件系统覆盖文件

/all-product-headers.yaml' 未找到

错误:无法 IRGen 表达。请检查上述错误消息以了解可能的根本原因。

在此处输入图片说明

对此有什么解决方案?任何帮助,将不胜感激。

debugging swift5 xcode12

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