我有一个快速的应用程序,其中集成了领域。我在AppDelegate.swift中全局声明域,如下面的代码所示。当我执行此应用程序时,我的应用程序在设备上运行正常,甚至在测试模式下运行。
问题:
我的应用程序提交后,Apple审核委员会拒绝了应用程序,符号化的崩溃日志指出了域的初始化。
以下是代码,我可能做错了什么?
import UIKit
import CoreData
import Firebase
import UserNotifications
import Fabric
import RealmSwift
var uiRealm = try! Realm()
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate {
var window: UIWindow?
let gcmMessageIDKey = "gcm.message_id"
var tokenExists = false
let imageDb = DigitalFingerprint()
var uid: String!
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
#if DEVELOPMENT
print("Development Mode Started")
let filePath = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist")
guard let fileopts = FirebaseOptions.init(contentsOfFile: filePath!)
else {
fatalError("Couldn't load config file")
}
FirebaseApp.configure(options: fileopts)
#else
print("Production Mode Started")
FirebaseApp.configure()
#endif
Auth.auth().addStateDidChangeListener { (auth, user) in
if (user != nil) {
print("User is there")
self.uid = KeychainWrapper.standard.string(forKey: KEY_UID)
} else {
print("user signed out")
DB_URL.removeAllObservers()
DispatchQueue.main.async {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "starts") as? BootVC
var topRootViewController: UIViewController = (UIApplication.shared.keyWindow?.rootViewController)!
while((topRootViewController.presentedViewController) != nil){
topRootViewController = topRootViewController.presentedViewController!
}
topRootViewController.present(vc!, animated: true, completion: nil)
}
}
}
if uid != nil {
checkforAccess()
}
return true
}
以下是Real对象,DigitalFingerprint.swift
import Foundation
import RealmSwift
import UIKit
class DigitalFingerprint: Object {
@objc dynamic var imageData: Data? = nil
@objc dynamic var fid : String? = nil
@objc dynamic var uid : String? = nil
override static func primaryKey() -> String {
return "uid"
}
}
extension DigitalFingerprint {
func writeToRealm(){
try! uiRealm.write {
uiRealm.add(self, update: true)
}
}
func DeleteFromRealm(object: Results<DigitalFingerprint>){
try! uiRealm.write {
uiRealm.delete(object)
}
}
}
崩溃苹果审查委员会收到的日志。 :
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Triggered by Thread: 0
Application Specific Information:
abort() called
Filtered syslog:
None found
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x00000001830142e8 __pthread_kill + 8
1 libsystem_pthread.dylib 0x00000001831292f8 pthread_kill$VARIANT$mp + 396
2 libsystem_c.dylib 0x0000000182f83060 __abort + 152
3 libsystem_c.dylib 0x0000000182f82fc8 __abort + 0
4 libc++abi.dylib 0x000000018271f068 __cxa_bad_cast + 0
5 libc++abi.dylib 0x000000018271f1f8 default_terminate_handler+ 8696 () + 280
6 libobjc.A.dylib 0x0000000182748820 _objc_terminate+ 34848 () + 140
7 SpotMi 0x0000000100dc7d78 CLSTerminateHandler() + 1260920 (CLSException.mm:314)
8 libc++abi.dylib 0x000000018273754c std::__terminate(void (*)+ 107852 ()) + 16
9 libc++abi.dylib 0x00000001827375b8 std::terminate+ 107960 () + 60
10 Realm 0x0000000101f94a00 realm::Realm::open_with_config(realm::Realm::Config const&, std::__1::unique_ptr<realm::Replication, std::__1::default_delete<realm::Replication> >&, std::__1::unique_ptr<realm::SharedGroup, std::__1::default_delete<realm::SharedGroup> >&, std::__1::unique_ptr<realm::Group, std::__1::default_delete<realm::Group> >&, realm::Realm*) + 985600 (memory:3006)
11 Realm 0x0000000101f944e0 realm::Realm::Realm(realm::Realm::Config, std::__1::shared_ptr<realm::_impl::RealmCoordinator>) + 984288 (shared_realm.cpp:55)
12 Realm 0x0000000101ed9658 realm::Realm::make_shared_realm(realm::Realm::Config, std::__1::shared_ptr<realm::_impl::RealmCoordinator>)::make_shared_enabler::make_shared_enabler(realm::Realm::Config, std::__1::shared_ptr<realm::_impl::RealmCoordinator>) + 218712 (shared_realm.hpp:304)
13 Realm 0x0000000101ed94cc std::__1::shared_ptr<realm::Realm::make_shared_realm(realm::Realm::Config, std::__1::shared_ptr<realm::_impl::RealmCoordinator>)::make_shared_enabler> std::__1::shared_ptr<realm::Realm::make_shared_realm(realm::Realm::Config, std::__1::shared_ptr<realm::_impl::RealmCoordinator>)::make_shared_enabler>::make_shared<realm::Realm::Config, std::__1::shared_ptr<realm::_impl::RealmCoordinator> >(realm::Realm::Config&&, std::__1::shared_ptr<realm::_impl::RealmCoordinator>&&) + 218316 (memory:2172)
14 Realm 0x0000000101ed56a4 realm::_impl::RealmCoordinator::get_realm(realm::Realm::Config) + 202404 (realm_coordinator.cpp:229)
15 Realm 0x0000000101f965f0 realm::Realm::get_shared_realm(realm::Realm::Config) + 992752 (shared_realm.cpp:250)
16 Realm 0x0000000101f7016c +[RLMRealm realmWithConfiguration:error:] + 835948 (RLMRealm.mm:400)
17 RealmSwift 0x00000001023911e4 Realm.init() + 152036 (Realm.swift:0)
18 RealmSwift 0x0000000102391178 Realm.__allocating_init() + 151928 (Realm.swift:0)
19 SpotMi 0x0000000100c9be14 globalinit_33_E3853139275E4567E078AE3BFE0165A3_func0 + 32276 (AppDelegate.swift:23)
20 libdispatch.dylib 0x0000000182e7ea14 _dispatch_client_callout + 16
21 libdispatch.dylib 0x0000000182e82240 dispatch_once_f$VARIANT$mp + 60
22 SpotMi 0x0000000100cc2254 FeedVC.viewDidLoad() + 189012 (FeedVC.swift:84)
23 SpotMi 0x0000000100cc2650 @objc FeedVC.viewDidLoad() + 190032 (FeedVC.swift:0)
24 UIKit 0x000000018c9e3ae8 -[UIViewController loadViewIfRequired] + 1040
25 UIKit 0x000000018c9e36c0 -[UIViewController view] + 28
26 UIKit 0x000000018c9ea28c -[UIWindow addRootViewControllerViewIfPossible] + 136
27 UIKit 0x000000018c9e74ec -[UIWindow _setHidden:forced:] + 272
28 UIKit 0x000000018ca563a0 -[UIWindow makeKeyAndVisible] + 48
29 UIKit 0x000000018cc43d10 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 3620
30 UIKit 0x000000018cc48aa8 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1712
31 UIKit 0x000000018cee42d4 __111-[__UICanvasLifecycleMonitor_Compatability _scheduleFirstCommitForScene:transition:firstActivation:completion:]_block_invoke + 800
32 UIKit 0x000000018d1bc12c +[_UICanvas _enqueuePostSettingUpdateTransactionBlock:] + 160
33 UIKit 0x000000018cee3f38 -[__UICanvasLifecycleMonitor_Compatability _scheduleFirstCommitForScene:transition:firstActivation:completion:] + 252
34 UIKit 0x000000018cee4798 -[__UICanvasLifecycleMonitor_Compatability activateEventsOnly:withContext:completion:] + 732
35 UIKit 0x000000018d6697d0 __82-[_UIApplicationCanvas _transitionLifecycleStateWithTransitionContext:completion:]_block_invoke + 260
36 UIKit 0x000000018d669674 -[_UIApplicationCanvas _transitionLifecycleStateWithTransitionContext:completion:] + 448
37 UIKit 0x000000018d3d72dc __125-[_UICanvasLifecycleSettingsDiffAction performActionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:]_block_invoke + 220
38 UIKit 0x000000018d5703dc _performActionsWithDelayForTransitionContext + 112
39 UIKit 0x000000018d3d718c -[_UICanvasLifecycleSettingsDiffAction performActionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:] + 252
40 UIKit 0x000000018d1bb78c -[_UICanvas scene:didUpdateWithDiff:transitionContext:completion:] + 364
41 UIKit 0x000000018cc471ec -[UIApplication workspace:didCreateScene:withTransitionContext:completion:] + 540
42 UIKit 0x000000018d05cde8 -[UIApplicationSceneClientAgent scene:didInitializeWithEvent:completion:] + 364
43 FrontBoardServices 0x0000000185bc61f0 -[FBSSceneImpl _didCreateWithTransitionContext:completion:] + 364
44 FrontBoardServices 0x0000000185bceaf8 __56-[FBSWorkspace client:handleCreateScene:withCompletion:]_block_invoke_2 + 224
45 libdispatch.dylib 0x0000000182e7ea14 _dispatch_client_callout + 16
46 libdispatch.dylib 0x0000000182e86200 _dispatch_block_invoke_direct$VARIANT$mp + 288
47 FrontBoardServices 0x0000000185bfa7f8 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 36
48 FrontBoardServices 0x0000000185bfa49c -[FBSSerialQueue _performNext] + 404
49 FrontBoardServices 0x0000000185bfaa38 -[FBSSerialQueue _performNextFromRunLoopSource] + 56
50 CoreFoundation 0x00000001834aa97c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
51 CoreFoundation 0x00000001834aa8fc __CFRunLoopDoSource0 + 88
52 CoreFoundation 0x00000001834aa184 __CFRunLoopDoSources0 + 204
53 CoreFoundation 0x00000001834a7d5c __CFRunLoopRun + 1048
54 CoreFoundation 0x00000001833c7e58 CFRunLoopRunSpecific + 436
55 GraphicsServices 0x0000000185274f84 GSEventRunModal + 100
56 UIKit 0x000000018ca4767c UIApplicationMain + 236
57 SpotMi 0x0000000100c99b4c main + 23372 (SurpriseCell.swift:26)
58 libdyld.dylib 0x0000000182ee456c start + 4
我也在我的initialviewcontroller(Feedvc)中调用此函数,在viewDidAppear()
中我的程序流程是
1.load feedvc
如果用户为零
转到bootVc(从app delegate调用的那个)
我究竟做错了什么?
另外,只是在全局声明一个类型的变量,然后在didFinishLaunching()中初始化变量是一个更好的选择吗?
谢谢!
答案 0 :(得分:0)
嗯,在课外创建变量不是一个好主意。尝试创建
var uiRealm = try! Realm()
在AppDelegate类中。并在其他课程中使用(UIApplication.shared.delegate as! AppDelegate).uiRealm
。