小编fph*_*elp的帖子

在 Xcode 14 中使用没有 dSYM 的 Crashlytics

我的项目多年来一直在使用 Firebase 的 Crashlytics,并且我总是将 dSYM 文件从 App Store Connect 上传到 Firebase。然而,在 Xcode 14 中,Apple 取消了提交启用 Bitcode 的应用程序的功能,这意味着 dSYM 文件无法从 App Store Connect 下载。

我从 Xcode 14 向 App Store 上传了新版本,现在无法上传 dSYM 文件来查看应用程序中发生的任何崩溃。Crashlytics 甚至还有一个 dSYMs 部分来上传这些文件,但我无法上传任何内容

有没有人找到解决这个问题的方法?在不上传 dSYM 文件的情况下,自动上传崩溃从来没有真正对我有用过,并且只显示我使用方法手动记录的非致命崩溃Crashlytics.crashlytics().record(error: error)

我尝试过的:

  • 我已经多次查看了 Crashlytics 设置说明,它的调用似乎与 Xcode 更改之前相同。
  • 花了几天时间在互联网上搜索,但找不到任何适合这个的东西
  • 上传“myapp.app.dSYM”以及来自每个存档的“包内容”内的所有其他 .dSYM 文件(使用拖放到 Firebase 和脚本中的方式)

设置: 我附上了我的 Crashlytics 脚本的图像(来自 Crashlytics 教程)。我使用 Cocoapods 安装 Crashlytics,如下所示:

platform :ios, '14.0'

target `My App` do
   use_frameworks!
   pod 'FirebaseCrashlytics'
   pod 'Firebase/AnalyticsWithoutAdIdSupport'
end
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

先感谢您!我已经为此苦苦挣扎了一段时间,希望这也能对其他人有所帮助!

xcode ios firebase crashlytics

35
推荐指数
4
解决办法
9036
查看次数

将存档发送到 App Store Connect 时出错

昨天,我通过 App Store 更新到了 Xcode 13。我正在尝试通过“组织者”窗口中的常规方式将我的应用程序的存档发送到 App Store Connect,提交存档后,我会收到警告消息:

App Store Connect 操作警告

您的 iTMSTransporter 版本将在大约 10 天后更新。

我以前从未见过这个,也不知道这意味着什么。该存档稍后仍会显示在 Testflight 中并且可用,但我不确定在上传并带有警告的情况下使用此存档版本更新我的应用程序的 App Store 版本是否安全。

这个警告是什么?我该如何解决这个问题?

在 App Store Connect 上传后,我还收到了这封关于替代图标错误的电子邮件。我在应用程序中启用了替代应用程序图标,并且确定我的 iPhone 上有 120x120,所以我不确定为什么会发生这种情况。但如果这与上传警告无关,请忽略该电子邮件:

在此输入图像描述

预先感谢您的帮助!

编辑: 看起来苹果已经解决了这个问题,因为我的档案上传时没有那个奇怪的警告

xcode app-store ios app-store-connect ipados

19
推荐指数
2
解决办法
1万
查看次数

Mac 上的 DatePicker 不保存日期,直到按下返回键

我正在使用 Mac Catalyst 将我的 iPad 应用程序调整到 Mac,并且在使用 datePicker 时遇到了问题(它有一段datePickerMode时间)。在 iPad 上 datePicker 是一个轮子,每当用户在日期选择器上滚动时,就会触发 dateChanged 操作。但在 Mac 上,日期选择器不是滚动条,而是一种文本输入。我可以在 Mac 上键入和更改所有时间值,但在按下返回键之前不会触发 dateChanged 操作。

我想在用户进入某个时间时触发 dateChange 操作。我怎样才能做到这一点?我尝试向 datePicker 添加不同的目标,但没有任何效果。

我实际上更喜欢在 Mac 上使用日期滚动条,所以如果有人知道如何做到这一点,我将不胜感激(我在互联网上四处寻找,但一无所获)!

这是我的代码:

class DateVC: UIViewController {
     @IBOutlet weak var datePicker: UIDatePicker!

     override func viewDidLoad() {
          super.viewDidLoad()

          //Just show the time
          datePicker.datePickerMode = .time
    }

     //Action connected to datePicker. This is not called until I press enter on Mac
     @IBAction func datePickerChanged(_ sender: Any) {
        //do actions
     }

}
Run Code Online (Sandbox Code Playgroud)

macos datepicker swift mac-catalyst

11
推荐指数
1
解决办法
972
查看次数

如何将 Watch 应用迁移到 SwiftUI 生命周期

我有一个带有 Apple Watch 扩展的 iOS 应用程序。我下载了 Xcode 14 并收到警告:

WatchKit 故事板在 watchOS 7.0 及更高版本中已弃用。请迁移到 SwiftUI 和 SwiftUI 生命周期。

我完全支持这次迁移,事实上,我的初始托管控制器返回了 SwiftUI 视图。但我在任何地方都找不到如何从 WatchKit 实际迁移到 SwiftUI 生命周期。有谁知道如何做到这一点?

我完全可以删除我的 WatchKit 故事板,因为它们除了指向初始控制器之外没有使用。这是我的初始控制器代码(如果有帮助的话):

import WatchKit
import Foundation
import SwiftUI

class HostingController: WKHostingController<AnyView> {
    override var body: AnyView {
        return AnyView(WatchHomeUI())
    }
}
Run Code Online (Sandbox Code Playgroud)

lifecycle swift apple-watch watchkit swiftui

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

主应用程序或扩展更改后刷新核心数据

我一直在为我的核心数据应用程序开发一个今日小部件。我NSFetchedResultsController对小部件和主应用程序使用 a ,并在使用 UserDefaults 和这篇文章的帮助从相反目标更改/添加数据时收到通知。

但是更新数据或NSFetchedResultsController查看更改/添加不起作用。我努力了:

  • 从重新获取数据NSFetchedResultsController
  • 将持久容器的视图上下文设置stalenessInterval为 0 并调用viewContext.refreshAllObjects()then 尝试重新获取数据(并且不重新获取数据)
  • shouldRefreshRefetchedObjects在 fetchedController 上设置为 true ,这样它就会自动调用。

我知道数据正在保存,因为如果我强制退出应用程序或重新运行小部件,新数据就在那里。但我不知道当相反的情况发生变化时如何刷新应用程序或小部件。

过去几天我一直在寻找解决方案,这实际上是我需要用这个小部件完成的最后一件事。请如果有人知道如何做到这一点请帮忙!

我如何设置我的NSFetchedResultsController

lazy var fetchedResultsController: NSFetchedResultsController<Item> = setupFetchedController()

override func viewDidAppear(_ animated: Bool) {
        loadData()

        //check to see if any data was changed. Being notified about changes works every time
        subscribeForChangesObservation()
}


private func setupFetchedController() -> NSFetchedResultsController<Item> {
        let managedContext = CoreDataManager.sharedManager.persistentContainer.viewContext

        let sortDescriptor = NSSortDescriptor(key: "date", ascending: true) …
Run Code Online (Sandbox Code Playgroud)

core-data nsfetchedresultscontroller swift ios-app-group today-extension

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

SecurityApplicationGroupIdentifier 的应用程序组返回 nil

我设置了一个应用程序组与我的 Today Extension 一起使用。我在主应用程序的目标和扩展程序的目标中添加了应用程序组。在开发人员门户的应用程序 ID 配置中,我启用了应用程序组。但由于某种原因,FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: id)每当我调用它时都会返回零。我已经检查了三次该forSecurityApplicationGroupIdentifier字符串并知道它是正确的。

有谁知道为什么这不起作用?

编辑:我能够通过编辑我的调试权利以包含应用程序组来解决零问题。我一直在关注这篇文章,并且能够成功地从 NSPersistentContainer 迁移我的数据,但是当我尝试在用户打开 iCloud 时使用 NSPersistentCloudKitContainer 时,同样的方法不起作用。它仍然能够迁移数据,但不允许我在设备之间同步数据(几乎只是使其成为常规的 NSPersistentContainer)。如果我恢复到以前的方式,我就可以使用 iCloud 同步。

NSPersistentCloudKitContainer任何人都可以帮助我解决迁移时使用应用程序组时的同步问题吗?

核心数据代码:

class CoreDataManager {
    static let sharedManager = CoreDataManager()
    private init() {}

    lazy var persistentContainer: NSPersistentContainer = {
        var useCloudSync = UserDefaults.standard.bool(forKey: "useCloudSync")

        //Get the correct container
        let containerToUse: NSPersistentContainer?
        if useCloudSync {
           containerToUse = NSPersistentCloudKitContainer(name: "App")
        } else {
            containerToUse = NSPersistentContainer(name: "App")      
        }

        guard let container = containerToUse else {
            fatalError("Couldn't get …
Run Code Online (Sandbox Code Playgroud)

xcode ios swift ios-app-group

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

小部件在 Xcode 14 的 iOS 15 或更早版本中不显示

我刚刚通过 Xcode 14 RC 添加了锁屏小部件。将其发送到 TestFlight 时,主屏幕小部件不会在 iOS 15 设备上显示,但会在 iOS 16 设备上显示。主屏幕和锁定屏幕小部件使用相同的文件,但我在 WidgetFamily 上有一个开关,可以为锁定屏幕显示不同的 SwiftUI 视图,并且仍然对两个小部件使用相同的 TimelineEntry。

当尝试在 iOS 15 模拟器上运行主屏幕小部件时,我收到错误:

dyld[33054]:找不到符号:_$s9WidgetKit0A6FamilyO15accessoryCorneryA2CmFWC

引用自:/Users/me/Library/Developer/CoreSimulator/Devices/0635BCE6-3EC3-44A8-AB14-7B41TED178F6/data/Containers/Bundle/Application/7EAAAE2-737A-4D13-A142-C609A921WEDS/My App.app/PlugIns /MyAppWidgetExtension.appex/MyAppWidgetExtension

预计在:/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 15.5.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/WidgetKit.framework/WidgetKit

有人经历过这个/知道如何解决这个问题吗?即使我取出 iOS 16 代码,也会出现同样的错误。我已经搜索了几个小时试图解决这个问题,但还没有解决方案有帮助。

xcode widget ios widgetkit xcode14

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

添加一个向后滑动的动作 swift 4

我已将其中一个视图控制器的导航栏中的后退按钮更改为自定义按钮,并为该按钮提供了按下时要执行的操作:

self.navigationItem.hidesBackButton = true
let backButton = UIBarButtonItem(image: UIImage(named: "backArrow"), style: .plain, target: self, action: #selector(self.back))
self.navigationItem.leftBarButtonItem = backButton
Run Code Online (Sandbox Code Playgroud)

这工作得很好,我可以使用以下方法保持向后滑动以弹出视图控制器:

self.interactivePopGestureRecognizer?.isEnabled = true
self.interactivePopGestureRecognizer?.delegate = self
Run Code Online (Sandbox Code Playgroud)

在我的导航控制器文件中。不幸的是,当我向后滑动时,我无法(或者我还没有弄清楚)调用back()视图控制器中更改后退按钮的函数。如何以及在哪里检测到我正在滑动返回,以便我可以调用特定视图控制器中的后退功能?

back uinavigationcontroller ios swift

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

从 TabBar 弹出

我目前有一个包含 5 个对象的标签栏。我想要做的是,如果用户按下第三个对象,弹出窗口将越过他们当前的屏幕,而不是将它们移动到另一个屏幕。然后,一旦用户按下其中一个弹出窗口,它就会将它们移动到下一个屏幕。我目前无法让这个弹出窗口发生。我该怎么做呢?我在草图中做了一个视图来向您展示我的意思(弹出窗口周围有红色框): 例子

我试图更改对象 3 与其视图控制器之间的转场,但它不起作用,因为要使对象 3 甚至显示在选项卡栏上,您需要一个“关系转场:视图控制器”。为了弹出窗口,我需要一个 Present Modally segue(我为视图控制器 segue 所做的 segue 类型)。因此,如果我执行 Present Modally 转场,而不是从选项卡控制器到带有弹出窗口的控制器的“关系转场:视图控制器”,我将没有“对象 3”并且只有 4 个选项卡栏图标而不是 5 个。

----编辑---- @Flickerlight 的逻辑:

`

import UIKit

@available(iOS 9.0, *)
let tbh = TabBarHandler()

@available(iOS 9.0, *)
class TabBarHandler: NSObject, UITabBarControllerDelegate{
    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
        let vcIndex = tabBarController.viewControllers!.index(of: viewController)!
        if  vcIndex == 2 {
            let button1 = UIButton()
            button1.setTitle("Cancel", for: .normal)
            button1.layer.cornerRadius = 5
            button1.setTitleColor(UIColor.white, for: .normal)
            button1.addTarget(self, action: …
Run Code Online (Sandbox Code Playgroud)

popup uitabbar ios swift swift3

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

拖动以关闭 UIPresentationController

我使用本教程制作了一个适合任何视图控制器并显示在屏幕的一半上的 UIPresentationController 。现在我想添加阻力来消除这个问题。我试图让拖动感觉自然且响应灵敏,就像 Apple iOS 13 股票应用程序上“热门故事”的拖动体验一样。我认为 iOS 13 模式拖动关闭会被保留,但它不会转移到这个控制器,但事实并非如此。

我发现的每一点代码和教程都有糟糕的拖动体验。有谁知道如何做到这一点?过去一周我一直在尝试/寻找。先感谢您

这是我的演示控制器代码

class SlideUpPresentationController: UIPresentationController {
    // MARK: - Variables
    private var dimmingView: UIView!
    
    //MARK: - View functions
    override init(presentedViewController: UIViewController, presenting presentingViewController: UIViewController?) {
        super.init(presentedViewController: presentedViewController, presenting: presentingViewController)
        setupDimmingView()
    }
    
    override func containerViewWillLayoutSubviews() {
      presentedView?.frame = frameOfPresentedViewInContainerView
    }
    
    override var frameOfPresentedViewInContainerView: CGRect {
        guard let container = containerView else { return super.frameOfPresentedViewInContainerView }
        let width = container.bounds.size.width
        let height : CGFloat = 300.0
        
        return CGRect(x: 0, y: container.bounds.size.height …
Run Code Online (Sandbox Code Playgroud)

draggable ios uipangesturerecognizer swift uipresentationcontroller

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