├── .github └── issue_template.md ├── .gitignore ├── .jazzy.yaml ├── .swiftpm └── xcode │ └── package.xcworkspace │ └── contents.xcworkspacedata ├── BugfenderSDK-XCFramework.json ├── BugfenderSDK.json ├── BugfenderSDK.podspec ├── BugfenderSDK.xcframework ├── Info.plist ├── _CodeSignature │ ├── CodeDirectory │ ├── CodeRequirements │ ├── CodeRequirements-1 │ ├── CodeResources │ └── CodeSignature ├── ios-arm64 │ └── BugfenderSDK.framework │ │ ├── BugfenderSDK │ │ ├── Headers │ │ ├── BFDefaultLogInterceptor.h │ │ ├── BFInterceptedLog.h │ │ ├── BFLogInterceptor.h │ │ ├── BFUserFeedbackNavigationController.h │ │ ├── BFUserFeedbackViewController.h │ │ ├── BugfenderSDK-Swift.h │ │ └── BugfenderSDK.h │ │ ├── Info.plist │ │ ├── Modules │ │ ├── BugfenderSDK.swiftmodule │ │ │ ├── arm64-apple-ios.abi.json │ │ │ ├── arm64-apple-ios.private.swiftinterface │ │ │ ├── arm64-apple-ios.swiftdoc │ │ │ └── arm64-apple-ios.swiftinterface │ │ └── module.modulemap │ │ └── PrivacyInfo.xcprivacy ├── ios-arm64_x86_64-maccatalyst │ └── BugfenderSDK.framework │ │ ├── BugfenderSDK │ │ ├── Headers │ │ ├── Modules │ │ ├── Resources │ │ └── Versions │ │ ├── A │ │ ├── BugfenderSDK │ │ ├── Headers │ │ │ ├── BFDefaultLogInterceptor.h │ │ │ ├── BFInterceptedLog.h │ │ │ ├── BFLogInterceptor.h │ │ │ ├── BFUserFeedbackNavigationController.h │ │ │ ├── BFUserFeedbackViewController.h │ │ │ ├── BugfenderSDK-Swift.h │ │ │ └── BugfenderSDK.h │ │ ├── Modules │ │ │ ├── BugfenderSDK.swiftmodule │ │ │ │ ├── arm64-apple-ios-macabi.abi.json │ │ │ │ ├── arm64-apple-ios-macabi.private.swiftinterface │ │ │ │ ├── arm64-apple-ios-macabi.swiftdoc │ │ │ │ ├── arm64-apple-ios-macabi.swiftinterface │ │ │ │ ├── x86_64-apple-ios-macabi.abi.json │ │ │ │ ├── x86_64-apple-ios-macabi.private.swiftinterface │ │ │ │ ├── x86_64-apple-ios-macabi.swiftdoc │ │ │ │ └── x86_64-apple-ios-macabi.swiftinterface │ │ │ └── module.modulemap │ │ └── Resources │ │ │ ├── Info.plist │ │ │ └── PrivacyInfo.xcprivacy │ │ └── Current └── ios-arm64_x86_64-simulator │ └── BugfenderSDK.framework │ ├── BugfenderSDK │ ├── Headers │ ├── BFDefaultLogInterceptor.h │ ├── BFInterceptedLog.h │ ├── BFLogInterceptor.h │ ├── BFUserFeedbackNavigationController.h │ ├── BFUserFeedbackViewController.h │ ├── BugfenderSDK-Swift.h │ └── BugfenderSDK.h │ ├── Info.plist │ ├── Modules │ ├── BugfenderSDK.swiftmodule │ │ ├── arm64-apple-ios-simulator.abi.json │ │ ├── arm64-apple-ios-simulator.private.swiftinterface │ │ ├── arm64-apple-ios-simulator.swiftdoc │ │ ├── arm64-apple-ios-simulator.swiftinterface │ │ ├── x86_64-apple-ios-simulator.abi.json │ │ ├── x86_64-apple-ios-simulator.private.swiftinterface │ │ ├── x86_64-apple-ios-simulator.swiftdoc │ │ └── x86_64-apple-ios-simulator.swiftinterface │ └── module.modulemap │ ├── PrivacyInfo.xcprivacy │ └── _CodeSignature │ └── CodeResources ├── CHANGELOG.md ├── Example ├── BugfenderExample.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ └── BugfenderExample.xcscheme ├── BugfenderExample.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── BugfenderExample │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Base.lproj │ │ ├── LaunchScreen.xib │ │ └── Main.storyboard │ ├── FirstViewController.h │ ├── FirstViewController.m │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── first.imageset │ │ │ ├── Contents.json │ │ │ └── first.pdf │ │ └── second.imageset │ │ │ ├── Contents.json │ │ │ └── second.pdf │ ├── Info.plist │ ├── SecondViewController.h │ ├── SecondViewController.m │ └── main.m ├── BugfenderExampleUITests │ ├── BugfenderExampleUITests.m │ └── Info.plist ├── Podfile └── Podfile.lock ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── Package.swift ├── README.md ├── docs ├── User-feedback-custom.png └── User-feedback-default.png ├── generate-docs ├── readme-images ├── User-feedback-custom.png └── spm │ ├── spm1.png │ ├── spm2.png │ ├── spm3.png │ ├── spm4.png │ └── spm5.png ├── upload-symbols.sh └── xcode-upload-symbols ├── README.md ├── upload-symbols.sh └── xcode.png /.github/issue_template.md: -------------------------------------------------------------------------------- 1 | _Please make sure to inform your SDK version number_. 2 | 3 | _If you prefer to contact us privately you can do so at our [support page](http://support.bugfender.com)_ 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | *.xccheckout 14 | *.moved-aside 15 | DerivedData 16 | *.hmap 17 | *.ipa 18 | *.xcuserstate 19 | .DS_Store 20 | 21 | Pods/ 22 | BugfenderSDK.framework.zip 23 | BugfenderSDK.xcframework.zip 24 | static-lib.zip 25 | 26 | .idea/ 27 | -------------------------------------------------------------------------------- /.jazzy.yaml: -------------------------------------------------------------------------------- 1 | objc: true 2 | author: Bugfender 3 | author_url: https://bugfender.com 4 | github_url: https://github.com/bugfender/BugfenderSDK-iOS 5 | module: BugfenderSDK 6 | sdk: iphonesimulator 7 | -------------------------------------------------------------------------------- /.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /BugfenderSDK-XCFramework.json: -------------------------------------------------------------------------------- 1 | { 2 | "1.8.0" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.8.0/BugfenderSDK.xcframework.zip", 3 | "1.9.0" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.9.0/BugfenderSDK.xcframework.zip", 4 | "1.9.1" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.9.1/BugfenderSDK.xcframework.zip", 5 | "1.9.2" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.9.2/BugfenderSDK.xcframework.zip", 6 | "1.10.0" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.10.0/BugfenderSDK.xcframework.zip", 7 | "1.10.1" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.10.1/BugfenderSDK.xcframework.zip", 8 | "1.10.2" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.10.2/BugfenderSDK.xcframework.zip", 9 | "1.10.3" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.10.3/BugfenderSDK.xcframework.zip", 10 | "1.10.4" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.10.4/BugfenderSDK.xcframework.zip", 11 | "1.10.5" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.10.5/BugfenderSDK.xcframework.zip", 12 | "1.10.6" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.10.6/BugfenderSDK.xcframework.zip", 13 | "1.11.0" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.11.0/BugfenderSDK.xcframework.zip", 14 | "1.12.0" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.12.0/BugfenderSDK.xcframework.zip", 15 | "1.12.1" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.12.1/BugfenderSDK.xcframework.zip", 16 | "1.12.2" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.12.2/BugfenderSDK.xcframework.zip", 17 | "1.13.0" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.13.0/BugfenderSDK.xcframework.zip", 18 | "1.13.1" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.13.1/BugfenderSDK.xcframework.zip", 19 | "1.13.2" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.13.2/BugfenderSDK.xcframework.zip", 20 | "2.0.0" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/2.0.0/BugfenderSDK.xcframework.zip", 21 | "2.0.1" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/2.0.1/BugfenderSDK.xcframework.zip" 22 | } -------------------------------------------------------------------------------- /BugfenderSDK.json: -------------------------------------------------------------------------------- 1 | { 2 | "1.6.3" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.6.3/BugfenderSDK.framework.zip", 3 | "1.6.4" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.6.4/BugfenderSDK.framework.zip", 4 | "1.6.5" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.6.5/BugfenderSDK.framework.zip", 5 | "1.6.6" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.6.6/BugfenderSDK.framework.zip", 6 | "1.7.0" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.7.0/BugfenderSDK.framework.zip", 7 | "1.8.0" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.8.0/BugfenderSDK.framework.zip", 8 | "1.9.0" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.9.0/BugfenderSDK.framework.zip", 9 | "1.9.1" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.9.1/BugfenderSDK.framework.zip", 10 | "1.9.2" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.9.2/BugfenderSDK.framework.zip", 11 | "1.10.0" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.10.0/BugfenderSDK.framework.zip", 12 | "1.10.1" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.10.1/BugfenderSDK.framework.zip", 13 | "1.10.2" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.10.2/BugfenderSDK.framework.zip", 14 | "1.10.3" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.10.3/BugfenderSDK.framework.zip", 15 | "1.10.4" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.10.4/BugfenderSDK.framework.zip", 16 | "1.10.5" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.10.5/BugfenderSDK.framework.zip", 17 | "1.10.6" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.10.6/BugfenderSDK.framework.zip", 18 | "1.11.0" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.11.0/BugfenderSDK.framework.zip", 19 | "1.12.0" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.12.0/BugfenderSDK.framework.zip", 20 | "1.12.1" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.12.1/BugfenderSDK.framework.zip", 21 | "1.12.2" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.12.2/BugfenderSDK.framework.zip", 22 | "1.13.0" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.13.0/BugfenderSDK.framework.zip", 23 | "1.13.1" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.13.1/BugfenderSDK.framework.zip", 24 | "1.13.2" : "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/1.13.2/BugfenderSDK.framework.zip" 25 | } 26 | -------------------------------------------------------------------------------- /BugfenderSDK.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'BugfenderSDK' 3 | s.version = '2.0.1' 4 | s.ios.deployment_target = '12.0' 5 | s.license = { :type => 'Commercial', :text => 'See https://bugfender.com/terms-of-service/' } 6 | s.summary = 'Bugfender: a mobile remote logger' 7 | s.description = 'A modern remote logger tailor-made for mobile development.' 8 | s.homepage = 'https://bugfender.com' 9 | s.author = { 'Bugfender' => 'support@bugfender.com' } 10 | s.requires_arc = true 11 | s.source = { 12 | :git => 'https://github.com/bugfender/BugfenderSDK-iOS.git', 13 | :tag => s.version.to_s 14 | } 15 | s.swift_versions = ['5.1'] 16 | s.frameworks = "Foundation", "SystemConfiguration", "Security", "MobileCoreServices" 17 | s.library = 'c++' 18 | s.vendored_frameworks = 'BugfenderSDK.xcframework' 19 | s.cocoapods_version = '>= 1.10.0' 20 | s.pod_target_xcconfig = { 'VALID_ARCHS' => 'arm64 arm64e armv7 armv7s x86_64' } 21 | s.preserve_paths = ['upload-symbols.sh'] 22 | s.prepare_command = <<-PREPARE_COMMAND_END 23 | cp -f ./xcode-upload-symbols/upload-symbols.sh ./upload-symbols.sh 24 | PREPARE_COMMAND_END 25 | 26 | end 27 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AvailableLibraries 6 | 7 | 8 | BinaryPath 9 | BugfenderSDK.framework/Versions/A/BugfenderSDK 10 | LibraryIdentifier 11 | ios-arm64_x86_64-maccatalyst 12 | LibraryPath 13 | BugfenderSDK.framework 14 | SupportedArchitectures 15 | 16 | arm64 17 | x86_64 18 | 19 | SupportedPlatform 20 | ios 21 | SupportedPlatformVariant 22 | maccatalyst 23 | 24 | 25 | BinaryPath 26 | BugfenderSDK.framework/BugfenderSDK 27 | LibraryIdentifier 28 | ios-arm64 29 | LibraryPath 30 | BugfenderSDK.framework 31 | SupportedArchitectures 32 | 33 | arm64 34 | 35 | SupportedPlatform 36 | ios 37 | 38 | 39 | BinaryPath 40 | BugfenderSDK.framework/BugfenderSDK 41 | LibraryIdentifier 42 | ios-arm64_x86_64-simulator 43 | LibraryPath 44 | BugfenderSDK.framework 45 | SupportedArchitectures 46 | 47 | arm64 48 | x86_64 49 | 50 | SupportedPlatform 51 | ios 52 | SupportedPlatformVariant 53 | simulator 54 | 55 | 56 | CFBundlePackageType 57 | XFWK 58 | XCFrameworkFormatVersion 59 | 1.0 60 | 61 | 62 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/_CodeSignature/CodeDirectory: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/BugfenderSDK.xcframework/_CodeSignature/CodeDirectory -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/_CodeSignature/CodeRequirements: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/BugfenderSDK.xcframework/_CodeSignature/CodeRequirements -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/_CodeSignature/CodeRequirements-1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/BugfenderSDK.xcframework/_CodeSignature/CodeRequirements-1 -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/_CodeSignature/CodeSignature: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/BugfenderSDK.xcframework/_CodeSignature/CodeSignature -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64/BugfenderSDK.framework/BugfenderSDK: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/BugfenderSDK.xcframework/ios-arm64/BugfenderSDK.framework/BugfenderSDK -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64/BugfenderSDK.framework/Headers/BFDefaultLogInterceptor.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Fran Montiel on 24/1/23. 3 | // Copyright (c) 2023 Beenario GmbH. All rights reserved. 4 | // 5 | 6 | #import 7 | #import "BFLogInterceptor.h" 8 | 9 | /** 10 | * Default BFLogInterceptor that returns the same BFInterceptedLog that receives 11 | */ 12 | @interface BFDefaultLogInterceptor: NSObject 13 | @end 14 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64/BugfenderSDK.framework/Headers/BFInterceptedLog.h: -------------------------------------------------------------------------------- 1 | // 2 | // BFInterceptedLog.h 3 | // BugfenderSDK 4 | // 5 | // Created by Fran Montiel on 24/1/23. 6 | // Copyright © 2023 Beenario GmbH. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /** 12 | * Intercepted log from NSLog/OSLog 13 | */ 14 | @interface BFInterceptedLog : NSObject 15 | 16 | /** 17 | * Initializes an BFInterceptedLog with a timestamp, text, and log level. 18 | * @note You will usually not need to use this method. 19 | * @param text Text of the log. 20 | * @param level Level of the log. See BFLogLevel enum for possible values. 21 | * @param date Timestamp of the log. 22 | */ 23 | -(instancetype _Nonnull) initWithText: (NSString*_Nonnull) text level: (NSInteger)level date: (NSDate*_Nonnull) date; 24 | 25 | /** 26 | * Line in the source file where the log was originated. 27 | */ 28 | @property (nonatomic, assign) NSInteger line; 29 | 30 | /** 31 | * Level of the log. See BFLogLevel enum for possible values. 32 | */ 33 | @property (nonatomic, assign) NSInteger level; 34 | 35 | /** 36 | * Timestamp of the log. 37 | */ 38 | @property (nonatomic, strong) NSDate * _Nonnull date; 39 | 40 | /** 41 | * Tag (or category) of the log. 42 | */ 43 | @property (nonatomic, strong) NSString * _Nonnull tag; 44 | 45 | /** 46 | * Method of the source file where the log was originated. 47 | */ 48 | @property (nonatomic, strong) NSString * _Nonnull method; 49 | 50 | /** 51 | * Source file name where the log was originated. 52 | */ 53 | @property (nonatomic, strong) NSString * _Nonnull file; 54 | 55 | /** 56 | * Text of the log. 57 | */ 58 | @property (nonatomic, strong) NSString * _Nonnull text; 59 | 60 | @end 61 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64/BugfenderSDK.framework/Headers/BFLogInterceptor.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSLogInterceptor.h 3 | // BugfenderSDK 4 | // 5 | // Created by Fran Montiel on 24/1/23. 6 | // Copyright © 2023 Beenario GmbH. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "BFInterceptedLog.h" 11 | 12 | /** 13 | * Intercept a log entry from NSLog/OSLog and allow to modify it or to block it. 14 | */ 15 | @protocol BFLogInterceptor 16 | 17 | /** 18 | * Intercept a log entry from NSLog/OSLog and allow to modify it or to block it. 19 | * @param interceptedLog log intercepted 20 | * @return The log entry to be logged. If nil is returned the log entry won't be logged. 21 | */ 22 | - (BFInterceptedLog *)intercept:(BFInterceptedLog *)interceptedLog; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64/BugfenderSDK.framework/Headers/BFUserFeedbackNavigationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BFUserFeedbackViewController.h 3 | // BugfenderSDK 4 | // 5 | // Created by Rubén Vázquez Otero on 15/10/2018. 6 | // Copyright © 2018 Beenario GmbH. All rights reserved. 7 | // 8 | 9 | #if TARGET_OS_IOS 10 | 11 | #import "BFUserFeedbackViewController.h" 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | /** 16 | * Navigation View Controller containing a BFUserFeedbackNavigationController as rootViewController 17 | */ 18 | @interface BFUserFeedbackNavigationController : UINavigationController 19 | 20 | 21 | 22 | /** 23 | * Root View Controller containing a table with the textfields used to gather feedback 24 | */ 25 | @property (nonatomic, strong) BFUserFeedbackViewController *feedbackViewController; 26 | 27 | /** 28 | Provides a View Controller to gather the feedback of the users and sent it to Bugfender. 29 | The returning BFUserFeedbackNavigationController has to be presented modally and it has it's own Send and Cancel buttons 30 | 31 | Additionally, it is possible to customize the aspect of the screen accessing BFUserFeedbackNavigationController.feedbackViewController 32 | 33 | @param title Title for the navigation bar 34 | @param hint Short text at the beginning 35 | @param subjectPlaceholder placeholder in the subject textfield 36 | @param messagePlaceholder placeholder in the message textfield 37 | @param sendButtonTitle title for the send button in the navigation bar 38 | @param cancelButtonTitle title for the cancel button 39 | @return BFUserFeedbackNavigationController containing a BFUserFeedbackViewController as root view controller 40 | */ 41 | + (BFUserFeedbackNavigationController *)userFeedbackViewControllerWithTitle:(NSString *)title 42 | hint:(NSString *)hint 43 | subjectPlaceholder:(NSString *)subjectPlaceholder 44 | messagePlaceholder:(NSString *)messagePlaceholder 45 | sendButtonTitle:(NSString *)sendButtonTitle 46 | cancelButtonTitle:(NSString *)cancelButtonTitle 47 | completion:(void (^)(BOOL feedbackSent, NSURL * _Nullable url))completionBlock; 48 | 49 | 50 | @end 51 | 52 | NS_ASSUME_NONNULL_END 53 | #endif 54 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64/BugfenderSDK.framework/Headers/BFUserFeedbackViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BFUserFeedbackViewController.h 3 | // BugfenderSDK 4 | // 5 | // Created by Rubén Vázquez Otero on 16/10/2018. 6 | // Copyright © 2018 Beenario GmbH. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /** 14 | * BFUserFeedbackViewController provides a basic and configurable view controller to gather feedback from the users 15 | */ 16 | @interface BFUserFeedbackViewController : UITableViewController { 17 | 18 | } 19 | 20 | #pragma mark - Background colors 21 | 22 | /** 23 | The background of the view controller 24 | */ 25 | @property (nonatomic, strong) UIColor *mainBackgroundColor; 26 | 27 | /** 28 | Background for textfields 29 | */ 30 | @property (nonatomic, strong) UIColor *secondaryBackgroundColor; 31 | 32 | #pragma mark - Hint 33 | 34 | /** 35 | The hint is the upper text in the view controller. 36 | Use the hint give instructions to your users or just to thank them for providing feedback 37 | */ 38 | @property (nonatomic, strong) NSString *hint; 39 | 40 | /** 41 | * Font from the hint 42 | */ 43 | @property (nonatomic, strong) UIFont *hintFont; 44 | 45 | /** 46 | * Font color from the hint 47 | */ 48 | @property (nonatomic, strong) UIColor *hintFontColor; 49 | 50 | #pragma mark - Subject 51 | 52 | /** 53 | The subject of the feedback. 54 | Remember to provide a placeholder 55 | */ 56 | @property (nonatomic, strong) UIFont *subjectFont; 57 | 58 | /** 59 | * Font color from the subject textfield 60 | */ 61 | @property (nonatomic, strong) UIColor *subjectFontColor; 62 | 63 | /** 64 | * Font color for the placeholder of the subject textfield 65 | */ 66 | @property (nonatomic, strong) UIColor *subjectPlaceholderFontColor; 67 | 68 | /** 69 | * Subject placeholder 70 | */ 71 | @property (nonatomic, strong) NSString *subjectPlaceholder; 72 | 73 | #pragma mark - Message 74 | /** 75 | The message of the feedback 76 | Remember to provide a placeholder 77 | */ 78 | @property (nonatomic, strong) UIFont *messageFont; 79 | 80 | /** 81 | * Message font color 82 | */ 83 | @property (nonatomic, strong) UIColor *messageFontColor; 84 | 85 | /** 86 | * Message placeholder font color 87 | */ 88 | @property (nonatomic, strong) UIColor *messagePlaceholderFontColor; 89 | 90 | /** 91 | * Message placeholder 92 | */ 93 | @property (nonatomic, strong) NSString *messagePlaceholder; 94 | 95 | #pragma mark - Actions 96 | 97 | /** 98 | * Hide view controller 99 | */ 100 | - (void)dismiss; 101 | 102 | /** 103 | * Send feedback to Bugfender 104 | */ 105 | - (void)sendFeedback; 106 | 107 | /** 108 | Pass a block if you want to be notified after feedback was sent (or not) 109 | */ 110 | @property (nonatomic, copy) void (^completionBlock)(BOOL feedbackSent, NSURL * _Nullable url); 111 | 112 | @end 113 | 114 | NS_ASSUME_NONNULL_END 115 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64/BugfenderSDK.framework/Headers/BugfenderSDK-Swift.h: -------------------------------------------------------------------------------- 1 | #if 0 2 | #elif defined(__arm64__) && __arm64__ 3 | // Generated by Apple Swift version 6.0.3 effective-5.10 (swiftlang-6.0.3.1.10 clang-1600.0.30.1) 4 | #ifndef BUGFENDERSDK_SWIFT_H 5 | #define BUGFENDERSDK_SWIFT_H 6 | #pragma clang diagnostic push 7 | #pragma clang diagnostic ignored "-Wgcc-compat" 8 | 9 | #if !defined(__has_include) 10 | # define __has_include(x) 0 11 | #endif 12 | #if !defined(__has_attribute) 13 | # define __has_attribute(x) 0 14 | #endif 15 | #if !defined(__has_feature) 16 | # define __has_feature(x) 0 17 | #endif 18 | #if !defined(__has_warning) 19 | # define __has_warning(x) 0 20 | #endif 21 | 22 | #if __has_include() 23 | # include 24 | #endif 25 | 26 | #pragma clang diagnostic ignored "-Wauto-import" 27 | #if defined(__OBJC__) 28 | #include 29 | #endif 30 | #if defined(__cplusplus) 31 | #include 32 | #include 33 | #include 34 | #include 35 | #include 36 | #include 37 | #include 38 | #else 39 | #include 40 | #include 41 | #include 42 | #include 43 | #endif 44 | #if defined(__cplusplus) 45 | #pragma clang diagnostic push 46 | #pragma clang diagnostic ignored "-Wnon-modular-include-in-framework-module" 47 | #if defined(__arm64e__) && __has_include() 48 | # include 49 | #else 50 | #pragma clang diagnostic push 51 | #pragma clang diagnostic ignored "-Wreserved-macro-identifier" 52 | # ifndef __ptrauth_swift_value_witness_function_pointer 53 | # define __ptrauth_swift_value_witness_function_pointer(x) 54 | # endif 55 | # ifndef __ptrauth_swift_class_method_pointer 56 | # define __ptrauth_swift_class_method_pointer(x) 57 | # endif 58 | #pragma clang diagnostic pop 59 | #endif 60 | #pragma clang diagnostic pop 61 | #endif 62 | 63 | #if !defined(SWIFT_TYPEDEFS) 64 | # define SWIFT_TYPEDEFS 1 65 | # if __has_include() 66 | # include 67 | # elif !defined(__cplusplus) 68 | typedef uint_least16_t char16_t; 69 | typedef uint_least32_t char32_t; 70 | # endif 71 | typedef float swift_float2 __attribute__((__ext_vector_type__(2))); 72 | typedef float swift_float3 __attribute__((__ext_vector_type__(3))); 73 | typedef float swift_float4 __attribute__((__ext_vector_type__(4))); 74 | typedef double swift_double2 __attribute__((__ext_vector_type__(2))); 75 | typedef double swift_double3 __attribute__((__ext_vector_type__(3))); 76 | typedef double swift_double4 __attribute__((__ext_vector_type__(4))); 77 | typedef int swift_int2 __attribute__((__ext_vector_type__(2))); 78 | typedef int swift_int3 __attribute__((__ext_vector_type__(3))); 79 | typedef int swift_int4 __attribute__((__ext_vector_type__(4))); 80 | typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); 81 | typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); 82 | typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); 83 | #endif 84 | 85 | #if !defined(SWIFT_PASTE) 86 | # define SWIFT_PASTE_HELPER(x, y) x##y 87 | # define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) 88 | #endif 89 | #if !defined(SWIFT_METATYPE) 90 | # define SWIFT_METATYPE(X) Class 91 | #endif 92 | #if !defined(SWIFT_CLASS_PROPERTY) 93 | # if __has_feature(objc_class_property) 94 | # define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ 95 | # else 96 | # define SWIFT_CLASS_PROPERTY(...) 97 | # endif 98 | #endif 99 | #if !defined(SWIFT_RUNTIME_NAME) 100 | # if __has_attribute(objc_runtime_name) 101 | # define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) 102 | # else 103 | # define SWIFT_RUNTIME_NAME(X) 104 | # endif 105 | #endif 106 | #if !defined(SWIFT_COMPILE_NAME) 107 | # if __has_attribute(swift_name) 108 | # define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) 109 | # else 110 | # define SWIFT_COMPILE_NAME(X) 111 | # endif 112 | #endif 113 | #if !defined(SWIFT_METHOD_FAMILY) 114 | # if __has_attribute(objc_method_family) 115 | # define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) 116 | # else 117 | # define SWIFT_METHOD_FAMILY(X) 118 | # endif 119 | #endif 120 | #if !defined(SWIFT_NOESCAPE) 121 | # if __has_attribute(noescape) 122 | # define SWIFT_NOESCAPE __attribute__((noescape)) 123 | # else 124 | # define SWIFT_NOESCAPE 125 | # endif 126 | #endif 127 | #if !defined(SWIFT_RELEASES_ARGUMENT) 128 | # if __has_attribute(ns_consumed) 129 | # define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed)) 130 | # else 131 | # define SWIFT_RELEASES_ARGUMENT 132 | # endif 133 | #endif 134 | #if !defined(SWIFT_WARN_UNUSED_RESULT) 135 | # if __has_attribute(warn_unused_result) 136 | # define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 137 | # else 138 | # define SWIFT_WARN_UNUSED_RESULT 139 | # endif 140 | #endif 141 | #if !defined(SWIFT_NORETURN) 142 | # if __has_attribute(noreturn) 143 | # define SWIFT_NORETURN __attribute__((noreturn)) 144 | # else 145 | # define SWIFT_NORETURN 146 | # endif 147 | #endif 148 | #if !defined(SWIFT_CLASS_EXTRA) 149 | # define SWIFT_CLASS_EXTRA 150 | #endif 151 | #if !defined(SWIFT_PROTOCOL_EXTRA) 152 | # define SWIFT_PROTOCOL_EXTRA 153 | #endif 154 | #if !defined(SWIFT_ENUM_EXTRA) 155 | # define SWIFT_ENUM_EXTRA 156 | #endif 157 | #if !defined(SWIFT_CLASS) 158 | # if __has_attribute(objc_subclassing_restricted) 159 | # define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA 160 | # define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 161 | # else 162 | # define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 163 | # define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 164 | # endif 165 | #endif 166 | #if !defined(SWIFT_RESILIENT_CLASS) 167 | # if __has_attribute(objc_class_stub) 168 | # define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub)) 169 | # define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME) 170 | # else 171 | # define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) 172 | # define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME) 173 | # endif 174 | #endif 175 | #if !defined(SWIFT_PROTOCOL) 176 | # define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA 177 | # define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA 178 | #endif 179 | #if !defined(SWIFT_EXTENSION) 180 | # define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) 181 | #endif 182 | #if !defined(OBJC_DESIGNATED_INITIALIZER) 183 | # if __has_attribute(objc_designated_initializer) 184 | # define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) 185 | # else 186 | # define OBJC_DESIGNATED_INITIALIZER 187 | # endif 188 | #endif 189 | #if !defined(SWIFT_ENUM_ATTR) 190 | # if __has_attribute(enum_extensibility) 191 | # define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility))) 192 | # else 193 | # define SWIFT_ENUM_ATTR(_extensibility) 194 | # endif 195 | #endif 196 | #if !defined(SWIFT_ENUM) 197 | # define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type 198 | # if __has_feature(generalized_swift_name) 199 | # define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type 200 | # else 201 | # define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility) 202 | # endif 203 | #endif 204 | #if !defined(SWIFT_UNAVAILABLE) 205 | # define SWIFT_UNAVAILABLE __attribute__((unavailable)) 206 | #endif 207 | #if !defined(SWIFT_UNAVAILABLE_MSG) 208 | # define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg))) 209 | #endif 210 | #if !defined(SWIFT_AVAILABILITY) 211 | # define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__))) 212 | #endif 213 | #if !defined(SWIFT_WEAK_IMPORT) 214 | # define SWIFT_WEAK_IMPORT __attribute__((weak_import)) 215 | #endif 216 | #if !defined(SWIFT_DEPRECATED) 217 | # define SWIFT_DEPRECATED __attribute__((deprecated)) 218 | #endif 219 | #if !defined(SWIFT_DEPRECATED_MSG) 220 | # define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__))) 221 | #endif 222 | #if !defined(SWIFT_DEPRECATED_OBJC) 223 | # if __has_feature(attribute_diagnose_if_objc) 224 | # define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning"))) 225 | # else 226 | # define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg) 227 | # endif 228 | #endif 229 | #if defined(__OBJC__) 230 | #if !defined(IBSegueAction) 231 | # define IBSegueAction 232 | #endif 233 | #endif 234 | #if !defined(SWIFT_EXTERN) 235 | # if defined(__cplusplus) 236 | # define SWIFT_EXTERN extern "C" 237 | # else 238 | # define SWIFT_EXTERN extern 239 | # endif 240 | #endif 241 | #if !defined(SWIFT_CALL) 242 | # define SWIFT_CALL __attribute__((swiftcall)) 243 | #endif 244 | #if !defined(SWIFT_INDIRECT_RESULT) 245 | # define SWIFT_INDIRECT_RESULT __attribute__((swift_indirect_result)) 246 | #endif 247 | #if !defined(SWIFT_CONTEXT) 248 | # define SWIFT_CONTEXT __attribute__((swift_context)) 249 | #endif 250 | #if !defined(SWIFT_ERROR_RESULT) 251 | # define SWIFT_ERROR_RESULT __attribute__((swift_error_result)) 252 | #endif 253 | #if defined(__cplusplus) 254 | # define SWIFT_NOEXCEPT noexcept 255 | #else 256 | # define SWIFT_NOEXCEPT 257 | #endif 258 | #if !defined(SWIFT_C_INLINE_THUNK) 259 | # if __has_attribute(always_inline) 260 | # if __has_attribute(nodebug) 261 | # define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline)) __attribute__((nodebug)) 262 | # else 263 | # define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline)) 264 | # endif 265 | # else 266 | # define SWIFT_C_INLINE_THUNK inline 267 | # endif 268 | #endif 269 | #if defined(_WIN32) 270 | #if !defined(SWIFT_IMPORT_STDLIB_SYMBOL) 271 | # define SWIFT_IMPORT_STDLIB_SYMBOL __declspec(dllimport) 272 | #endif 273 | #else 274 | #if !defined(SWIFT_IMPORT_STDLIB_SYMBOL) 275 | # define SWIFT_IMPORT_STDLIB_SYMBOL 276 | #endif 277 | #endif 278 | #if defined(__OBJC__) 279 | #if __has_feature(objc_modules) 280 | #if __has_warning("-Watimport-in-framework-header") 281 | #pragma clang diagnostic ignored "-Watimport-in-framework-header" 282 | #endif 283 | #endif 284 | 285 | #endif 286 | #pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" 287 | #pragma clang diagnostic ignored "-Wduplicate-method-arg" 288 | #if __has_warning("-Wpragma-clang-attribute") 289 | # pragma clang diagnostic ignored "-Wpragma-clang-attribute" 290 | #endif 291 | #pragma clang diagnostic ignored "-Wunknown-pragmas" 292 | #pragma clang diagnostic ignored "-Wnullability" 293 | #pragma clang diagnostic ignored "-Wdollar-in-identifier-extension" 294 | #pragma clang diagnostic ignored "-Wunsafe-buffer-usage" 295 | 296 | #if __has_attribute(external_source_symbol) 297 | # pragma push_macro("any") 298 | # undef any 299 | # pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="BugfenderSDK",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol)) 300 | # pragma pop_macro("any") 301 | #endif 302 | 303 | #if defined(__OBJC__) 304 | 305 | #endif 306 | #if __has_attribute(external_source_symbol) 307 | # pragma clang attribute pop 308 | #endif 309 | #if defined(__cplusplus) 310 | #endif 311 | #pragma clang diagnostic pop 312 | #endif 313 | 314 | #else 315 | #error unsupported Swift architecture 316 | #endif 317 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64/BugfenderSDK.framework/Headers/BugfenderSDK.h: -------------------------------------------------------------------------------- 1 | // 2 | // BugfenderSDK.h 3 | // BugfenderSDK 4 | // Copyright (c) 2014 Bugfender GmbH. All rights reserved. 5 | // 6 | 7 | #import 8 | #import "BFLogInterceptor.h" 9 | #import "BFDefaultLogInterceptor.h" 10 | 11 | #if TARGET_OS_IOS 12 | 13 | #import "BFUserFeedbackNavigationController.h" 14 | 15 | #endif 16 | 17 | NS_ASSUME_NONNULL_BEGIN 18 | 19 | #define BFLibraryVersionNumber_0_1_0 0 20 | #define BFLibraryVersionNumber_0_2_0 1 21 | #define BFLibraryVersionNumber_0_2_1 2 22 | #define BFLibraryVersionNumber_0_3_0 3 23 | #define BFLibraryVersionNumber_0_3_1 4 24 | #define BFLibraryVersionNumber_0_3_2 5 25 | #define BFLibraryVersionNumber_0_3_3 6 26 | #define BFLibraryVersionNumber_0_3_4 7 27 | #define BFLibraryVersionNumber_0_3_5 8 28 | #define BFLibraryVersionNumber_0_3_6 9 29 | #define BFLibraryVersionNumber_0_3_7 10 30 | #define BFLibraryVersionNumber_0_3_8 11 31 | #define BFLibraryVersionNumber_0_3_9 12 32 | #define BFLibraryVersionNumber_0_3_10 13 33 | #define BFLibraryVersionNumber_0_3_11 14 34 | #define BFLibraryVersionNumber_0_3_12 15 35 | #define BFLibraryVersionNumber_0_3_13 16 36 | #define BFLibraryVersionNumber_0_3_14 17 37 | #define BFLibraryVersionNumber_0_3_15 18 38 | #define BFLibraryVersionNumber_0_3_16 19 39 | #define BFLibraryVersionNumber_0_3_17 20 40 | #define BFLibraryVersionNumber_0_3_18 21 41 | #define BFLibraryVersionNumber_0_3_19 22 42 | #define BFLibraryVersionNumber_0_3_20 23 43 | #define BFLibraryVersionNumber_0_3_21 24 44 | #define BFLibraryVersionNumber_0_3_22 25 45 | #define BFLibraryVersionNumber_0_3_23 26 46 | #define BFLibraryVersionNumber_0_3_24 27 47 | #define BFLibraryVersionNumber_0_3_25 28 48 | #define BFLibraryVersionNumber_0_3_26 29 49 | #define BFLibraryVersionNumber_0_3_27 30 50 | #define BFLibraryVersionNumber_1_4_0 31 51 | #define BFLibraryVersionNumber_1_4_1 32 52 | #define BFLibraryVersionNumber_1_4_2 33 53 | #define BFLibraryVersionNumber_1_4_3 34 54 | #define BFLibraryVersionNumber_1_4_4 34 // Mistake: We released the version without incrementing the number. 55 | #define BFLibraryVersionNumber_1_4_5 36 56 | #define BFLibraryVersionNumber_1_4_6 37 57 | #define BFLibraryVersionNumber_1_4_7 38 58 | #define BFLibraryVersionNumber_1_4_8 39 59 | #define BFLibraryVersionNumber_1_4_9 40 60 | #define BFLibraryVersionNumber_1_4_10 41 61 | #define BFLibraryVersionNumber_1_5_0 42 62 | #define BFLibraryVersionNumber_1_5_1 43 63 | #define BFLibraryVersionNumber_1_5_2 44 64 | #define BFLibraryVersionNumber_1_5_3 45 65 | #define BFLibraryVersionNumber_1_5_4 46 66 | #define BFLibraryVersionNumber_1_5_5 47 67 | #define BFLibraryVersionNumber_1_5_6 48 68 | #define BFLibraryVersionNumber_1_6_0 49 69 | #define BFLibraryVersionNumber_1_6_1 50 70 | #define BFLibraryVersionNumber_1_6_2 51 71 | #define BFLibraryVersionNumber_1_6_3 52 72 | #define BFLibraryVersionNumber_1_6_4 53 73 | #define BFLibraryVersionNumber_1_6_5 54 74 | #define BFLibraryVersionNumber_1_6_6 55 75 | #define BFLibraryVersionNumber_1_7_0 56 76 | #define BFLibraryVersionNumber_1_8_0 57 77 | #define BFLibraryVersionNumber_1_9_0 58 78 | #define BFLibraryVersionNumber_1_9_1 59 79 | #define BFLibraryVersionNumber_1_9_2 60 80 | #define BFLibraryVersionNumber_1_10_0 61 81 | #define BFLibraryVersionNumber_1_10_1 62 82 | #define BFLibraryVersionNumber_1_10_2 63 83 | #define BFLibraryVersionNumber_1_10_3 64 84 | #define BFLibraryVersionNumber_1_10_4 65 85 | #define BFLibraryVersionNumber_1_10_5 66 86 | #define BFLibraryVersionNumber_1_10_6 67 87 | #define BFLibraryVersionNumber_1_11_0 68 88 | #define BFLibraryVersionNumber_1_12_0 69 89 | #define BFLibraryVersionNumber_1_12_1 70 90 | #define BFLibraryVersionNumber_1_12_2 71 91 | #define BFLibraryVersionNumber_1_13_0 72 92 | #define BFLibraryVersionNumber_1_13_1 73 93 | #define BFLibraryVersionNumber_1_13_2 74 94 | #define BFLibraryVersionNumber_2_0_0 75 95 | #define BFLibraryVersionNumber_2_0_1 76 96 | 97 | /** 98 | * Current Bugfender version number. 99 | * @note This value can be compared with the defined macros BFLibraryVersionNumber_X_Y_Z. 100 | **/ 101 | FOUNDATION_EXPORT double const BFLibraryVersionNumber; 102 | 103 | /** Defines the level of a log */ 104 | typedef NS_ENUM(NSUInteger, BFLogLevel) 105 | { 106 | /** Default/Debug log level */ 107 | BFLogLevelDefault = 0, 108 | /** Warning log level */ 109 | BFLogLevelWarning = 1, 110 | /** Error log level */ 111 | BFLogLevelError = 2, 112 | /** Trace log level */ 113 | BFLogLevelTrace = 3, 114 | /** Info log level */ 115 | BFLogLevelInfo = 4, 116 | /** Fatal log level */ 117 | BFLogLevelFatal = 5 118 | }; 119 | 120 | #define BFLog(args, ...) BFLog2(BFLogLevelDefault, nil, args, ##__VA_ARGS__) 121 | #define BFLogWarn(args, ...) BFLog2(BFLogLevelWarning, nil, args, ##__VA_ARGS__) 122 | #define BFLogErr(args, ...) BFLog2(BFLogLevelError, nil, args, ##__VA_ARGS__) 123 | #define BFLogTrace(args, ...) BFLog2(BFLogLevelTrace, nil, args, ##__VA_ARGS__) 124 | #define BFLogInfo(args, ...) BFLog2(BFLogLevelInfo, nil, args, ##__VA_ARGS__) 125 | #define BFLogFatal(args, ...) BFLog2(BFLogLevelFatal, nil, args, ##__VA_ARGS__) 126 | 127 | #define BFLog2(logLevel, tagName, fmt, ...) \ 128 | [Bugfender logWithLineNumber:__LINE__ method:[NSString stringWithFormat:@"%s",__PRETTY_FUNCTION__] file:[[NSString stringWithFormat:@"%s",__FILE__] lastPathComponent] level:logLevel tag:tagName message:fmt == nil ? @"" : [NSString stringWithFormat:fmt, ##__VA_ARGS__]] 129 | 130 | 131 | 132 | /** 133 | * Main Bugfender interface. 134 | **/ 135 | @interface Bugfender : NSObject 136 | 137 | /** ******************************************************************** ** 138 | * @name Configuration 139 | ** ******************************************************************** **/ 140 | 141 | /** 142 | * Sets the URL of the API 143 | * @note Usage of this function is not necessary in the general use case. Please use exclusively when 144 | * directed from technical support. 145 | * @warning This method must be called before activateLogger. 146 | * @param url URL of the API to use 147 | */ 148 | + (void)setApiURL:(NSURL*)url; 149 | 150 | /** 151 | * Sets the URL of the Bugfender Dashboard 152 | * @note Usage of this function is not necessary in the general use case. Please use exclusively when 153 | * directed from technical support. 154 | * @warning This method must be called before activateLogger. 155 | * @param url base URL of the Bugfender's dashboard 156 | */ 157 | + (void)setBaseURL:(NSURL*)url; 158 | 159 | /** 160 | * Activates the Bugfender logger for a specific app. 161 | * @param appKey The app key of the Bugfender application, get it in bugfender.com 162 | * @warning If Bugfender has already been initialized with a different app key `NSInvalidArgumentException` will be thrown. 163 | * @note This method needs to be called before any `BFLog` call, otherwise they will be ignored. 164 | **/ 165 | + (void)activateLogger:(NSString*)appKey; 166 | 167 | /** 168 | * Returns the app key. 169 | * @return The app key, or nil if Bugfender has not been initialized. 170 | **/ 171 | + (nullable NSString*)appKey; 172 | 173 | /** 174 | * Maximum space available to store local logs. This value is represented in bytes. Default value is 5242880 (1024*1024*5 = 5MB). 175 | * @note If maximumLocalStorageSize is 0 (zero), then there is no limit and everything will be stored locally. 176 | **/ 177 | + (NSUInteger)maximumLocalStorageSize; 178 | 179 | /** 180 | * Set the maximum space available to store local logs. This value is represented in bytes. There's a limit of 50 MB. 181 | * @param maximumLocalStorageSize Maximum size in bytes. Range accepted is from 1 MB to 50 MB. If the value provider 182 | * is below this range it will be set to 1 MB, if is above the range it will be set to 50 MB 183 | **/ 184 | + (void)setMaximumLocalStorageSize:(NSUInteger)maximumLocalStorageSize; 185 | 186 | /** 187 | * Returns the device identifier used to identify the current device in the Bugfender website. 188 | * The device identifier is constant while the application is installed in the device. 189 | * @note This string can not be changed, but can be shown to the user or sent to your server, in order to 190 | * keep a relationship between a Bugfender device and a user or some other important event in your application. 191 | * 192 | * @return A string identifying the device. 193 | **/ 194 | + (NSString*)deviceIdentifier __deprecated_msg("Use deviceIdentifierUrl instead."); 195 | 196 | /** 197 | * Returns a URL linking to the current device in bugfender. 198 | * The device identifier is constant while the application is installed in the device. 199 | * @note This url can be sent to your server and used to create integrations with other services. Also can be stored to 200 | * keep a relationship between a Bugfender device and a user or some other important event in your application. 201 | * 202 | * @return URL linking to the device in Bugfender 203 | **/ 204 | + (nullable NSURL *)deviceIdentifierUrl; 205 | 206 | /** 207 | * 208 | * The session identifier is constant while the application is running. 209 | * @return A string identifying the current session. 210 | */ 211 | + (nullable NSString *)sessionIdentifier __deprecated_msg("Use sessionIdentifierUrl instead."); 212 | 213 | /** 214 | * 215 | * The session identifier url is constant while the application is running. 216 | * @note This url can be sent to your server and used to create integrations with other services. 217 | * @return A URL linking to the current session in Bugfender. 218 | */ 219 | + (nullable NSURL *)sessionIdentifierUrl; 220 | 221 | /** 222 | * Synchronizes all logs with the server all the time, regardless if this device is enabled or not. 223 | * @note This method is useful when the logs should be sent to the server 224 | * regardless if the device is enabled in the Bugfender Console. 225 | * 226 | * Logs are synchronized continuously while forceEnabled is active. 227 | * 228 | * This command can be called anytime, and will take effect the next time the device is online. 229 | * @param enabled Whether logs should be sent regardless of the Bugfender Console settings. 230 | */ 231 | +(void) setForceEnabled:(BOOL)enabled; 232 | 233 | /** 234 | * Gets the status of forceEnabled. 235 | * @see setForceEnabled 236 | */ 237 | +(BOOL) forceEnabled; 238 | 239 | /** 240 | * Prints messages to console for debugging purposes. 241 | * @param enabled Whether printing to console is enabled or not. By default it is enabled. 242 | */ 243 | +(void) setPrintToConsole:(BOOL)enabled; 244 | 245 | /** 246 | * Gets the status of printToConsole. printToConsole prints messages to console. By default it is enabled. 247 | */ 248 | +(BOOL) printToConsole; 249 | 250 | #if TARGET_OS_IOS 251 | /** 252 | * Logs all actions performed and screen changes in the application, such as button touches, swipes and gestures. 253 | */ 254 | +(void)enableUIEventLogging; 255 | 256 | /** 257 | * Logs all actions performed and screen changes in the application, such as button touches, swipes and gestures. 258 | * @param ignoredViewsTags Tags of views that should not be observed and logged by Bugfender 259 | */ 260 | + (void)enableUIEventLoggingWithIgnoredViewsTags:(NSArray *)ignoredViewsTags; 261 | 262 | #endif 263 | 264 | /** 265 | * Enable crash reporting tool functionality. 266 | */ 267 | +(void)enableCrashReporting; 268 | 269 | /** ******************************************************************** ** 270 | * @name Device details 271 | ** ******************************************************************** **/ 272 | 273 | /** 274 | * Sets the name for the device. If the Device Name is not set, then the iOS standard device name will be automatically sent 275 | * @note This method has to be called prior to activate logger. Otherwise, an exception will be thrown. 276 | * @param deviceName Device name that will be shown in the Dashboard. 277 | */ 278 | +(void)overrideDeviceName:(NSString *)deviceName __deprecated_msg("Use setDeviceString:forKey: instead, which allows to change the name once set. This function will be removed in a future version."); 279 | 280 | /** 281 | * Sets a device detail with boolean type. 282 | * @note Similarly to an NSDictionary, where you can set key-value pairs 283 | * related to a Bugfender device. 284 | * @param b A boolean value. 285 | * @param key Key. 286 | */ 287 | +(void)setDeviceBOOL:(BOOL)b forKey:(NSString*)key; 288 | /** 289 | * Sets a device detail with string type. 290 | * @note Similarly to an NSDictionary, where you can set key-value pairs 291 | * related to a Bugfender device. 292 | * @param s A string value. The maximum length allowed is 192 bytes. 293 | * @param key Key. 294 | */ 295 | +(void)setDeviceString:(NSString*)s forKey:(NSString*)key; 296 | /** 297 | * Sets a device detail with integer type. 298 | * @note Similarly to an NSDictionary, where you can set key-value pairs 299 | * related to a Bugfender device. 300 | * @param i An UInt64 value. 301 | * @param key Key. 302 | */ 303 | +(void)setDeviceInteger:(UInt64)i forKey:(NSString*)key; 304 | /** 305 | * Sets a device detail with double type. 306 | * @note Similarly to an NSDictionary, where you can set key-value pairs 307 | * related to a Bugfender device. 308 | * @param d A double value. 309 | * @param key Key. 310 | */ 311 | +(void)setDeviceDouble:(double)d forKey:(NSString*)key; 312 | /** 313 | * Removes a device detail. 314 | * @note Similarly to an NSDictionary, where you can remove an existent key-value pair 315 | * related to a Bugfender device by indicating its key. 316 | * @param key Key. 317 | */ 318 | +(void)removeDeviceKey:(NSString*)key; 319 | 320 | /** ******************************************************************** ** 321 | * @name Logging 322 | ** ******************************************************************** **/ 323 | 324 | /** 325 | * Bugfender extended interface for logging, which takes a simple string as log message. 326 | * @note This command can be called anytime, and will take effect the next time the device is online. 327 | * For efficiency, several log lines can be sent together to the server with some delay. 328 | * @param lineNumber The line number of the log. 329 | * @param method The method where the log has happened. 330 | * @param file The file where the log has happened. 331 | * @param level Log level. 332 | * @param tag Tag to be applied to the log line. 333 | * @param message Message to be logged. The message will be logged verbatim, no interpretation will be performed. 334 | * @note In Swift, prefer to use bfprint() in order to get file name and line number filled in automatically. In Objective-C you can use the BFLog or BFLog2 macros. 335 | **/ 336 | + (void) logWithLineNumber:(NSInteger)lineNumber method:(NSString*)method file:(NSString*)file level:(BFLogLevel)level tag:(nullable NSString*)tag message:(NSString*)message NS_SWIFT_NAME(log(lineNumber:method:file:level:tag:message:)); 337 | 338 | /** ******************************************************************** ** 339 | * @name Commands 340 | ** ******************************************************************** **/ 341 | 342 | /** 343 | * Synchronizes all logs with the server once, regardless if this device is enabled or not. 344 | * @note This method is useful when an error condition is detected and the logs should be sent to 345 | * the server for analysis, regardless if the device is enabled in the Bugfender Console. 346 | * 347 | * Logs are synchronized only once. After that, the logs are again sent according to the enabled flag 348 | * in the Bugfender Console. 349 | * 350 | * This command can be called anytime, and will take effect the next time the device is online. 351 | */ 352 | + (void) forceSendOnce; 353 | 354 | #pragma mark - Issues 355 | /** 356 | * Sends an issue 357 | * @note Sending an issue forces the logs of the current session being sent 358 | * to the server, and marks the session so that it is highlighted in the web console. 359 | * @param title Short description of the issue. 360 | * @param text Full details of the issue. Markdown format is accepted. 361 | * @return the issue identifier 362 | */ 363 | + (nullable NSString *)sendIssueWithTitle:(NSString *)title text:(NSString *)text __deprecated_msg("Use sendIssueReturningUrlWithTitle:text: instead."); 364 | 365 | /** 366 | * Sends an issue 367 | * @note Sending an issue forces the logs of the current session being sent 368 | * to the server, and marks the session so that it is highlighted in the web console. 369 | * @param title Short description of the issue. 370 | * @param text Full details of the issue. Markdown format is accepted. 371 | * @return an URL linking to the issue in Bugfender 372 | */ 373 | + (nullable NSURL *)sendIssueReturningUrlWithTitle:(NSString *)title text:(NSString *)text; 374 | 375 | #pragma mark - Crashes 376 | 377 | /** 378 | * Sends a crash 379 | * @note This method will send immediately a crash to the server 380 | * it doesn't take into account if crash reporting is enabled or not 381 | * @param title Short description of the crash. 382 | * @param text Full details of the crarsh. 383 | * @return an URL linking to the crash in Bugfender 384 | */ 385 | + (nullable NSURL *)sendCrashWithTitle:(NSString *)title text:(NSString *)text; 386 | 387 | #if TARGET_OS_IOS 388 | 389 | #pragma mark - User Feedback 390 | 391 | /** 392 | Provides a View Controller to gather the feedback of the users and sent it to Bugfender. 393 | The returning BFUserFeedbackNavigationController has to be presented modally and it has it's own Send and Cancel buttons 394 | 395 | Additionally, it is possible to customize the aspect of the screen accessing BFUserFeedbackNavigationController.feedbackViewController 396 | 397 | @param title Title for the navigation bar 398 | @param hint Short text at the beginning 399 | @param subjectPlaceholder placeholder in the subject textfield 400 | @param messagePlaceholder placeholder in the message textfield 401 | @param sendButtonTitle title for the send button in the navigation bar 402 | @param cancelButtonTitle title for the cancel button 403 | @return BFUserFeedbackNavigationController containing a BFUserFeedbackViewController as root view controller 404 | */ 405 | + (BFUserFeedbackNavigationController *)userFeedbackViewControllerWithTitle:(NSString *)title 406 | hint:(NSString *)hint 407 | subjectPlaceholder:(NSString *)subjectPlaceholder 408 | messagePlaceholder:(NSString *)messagePlaceholder 409 | sendButtonTitle:(NSString *)sendButtonTitle 410 | cancelButtonTitle:(NSString *)cancelButtonTitle 411 | completion:(void (^ _Nullable )(BOOL feedbackSent, NSURL * _Nullable url))completionBlock; 412 | 413 | #endif 414 | 415 | /** 416 | Allows to create custom UI to gather user feedback and send to Bugfender. 417 | 418 | @param subject subject of the feedback 419 | @param message message of the feedback 420 | */ 421 | + (void)sendUserFeedbackWithSubject:(NSString *)subject message:(NSString *)message __deprecated_msg("Use sendUserFeedbackReturningUrlWithSubject:message: instead."); 422 | 423 | /** 424 | Allows to create custom UI to gather user feedback and send to Bugfender. 425 | 426 | @param subject subject of the feedback 427 | @param message message of the feedback 428 | @return URL linking to Bugfender 429 | */ 430 | + (nullable NSURL *)sendUserFeedbackReturningUrlWithSubject:(NSString *)subject message:(NSString *)message; 431 | 432 | /** 433 | * Logs all logs written via NSLog or OSLog. 434 | */ 435 | + (void)enableNSLogLogging API_AVAILABLE(macos(10.15), ios(15.0), tvos(15.0), watchos(8.0)); 436 | 437 | /** 438 | * Logs all logs written via NSLog or OSLog. 439 | * @param interceptor intercept the logs and allow to modify or to block them before they are sent to Bugfender 440 | */ 441 | + (void)enableNSLogLoggingWithInterceptor:(id )interceptor API_AVAILABLE(macos(10.15), ios(15.0), tvos(15.0), watchos(8.0)) NS_SWIFT_NAME(enableNSLogLogging(withInterceptor:)); 442 | 443 | @end 444 | 445 | NS_ASSUME_NONNULL_END 446 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64/BugfenderSDK.framework/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/BugfenderSDK.xcframework/ios-arm64/BugfenderSDK.framework/Info.plist -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64/BugfenderSDK.framework/Modules/BugfenderSDK.swiftmodule/arm64-apple-ios.private.swiftinterface: -------------------------------------------------------------------------------- 1 | // swift-interface-format-version: 1.0 2 | // swift-compiler-version: Apple Swift version 6.0.3 effective-5.10 (swiftlang-6.0.3.1.10 clang-1600.0.30.1) 3 | // swift-module-flags: -target arm64-apple-ios12.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-bare-slash-regex -module-name BugfenderSDK 4 | // swift-module-flags-ignorable: -no-verify-emitted-module-interface 5 | @_exported import BugfenderSDK 6 | import Foundation 7 | import Swift 8 | import _Concurrency 9 | import _StringProcessing 10 | import _SwiftConcurrencyShims 11 | extension BugfenderSDK.Bugfender { 12 | public class func print(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 13 | public class func error(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 14 | public class func warning(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 15 | } 16 | public func BFLog(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 17 | public func BFLogWarn(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 18 | public func BFLogErr(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 19 | public func BFLogTrace(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 20 | public func BFLogInfo(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 21 | public func BFLogFatal(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 22 | public func bfprint(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 23 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64/BugfenderSDK.framework/Modules/BugfenderSDK.swiftmodule/arm64-apple-ios.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/BugfenderSDK.xcframework/ios-arm64/BugfenderSDK.framework/Modules/BugfenderSDK.swiftmodule/arm64-apple-ios.swiftdoc -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64/BugfenderSDK.framework/Modules/BugfenderSDK.swiftmodule/arm64-apple-ios.swiftinterface: -------------------------------------------------------------------------------- 1 | // swift-interface-format-version: 1.0 2 | // swift-compiler-version: Apple Swift version 6.0.3 effective-5.10 (swiftlang-6.0.3.1.10 clang-1600.0.30.1) 3 | // swift-module-flags: -target arm64-apple-ios12.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-bare-slash-regex -module-name BugfenderSDK 4 | // swift-module-flags-ignorable: -no-verify-emitted-module-interface 5 | @_exported import BugfenderSDK 6 | import Foundation 7 | import Swift 8 | import _Concurrency 9 | import _StringProcessing 10 | import _SwiftConcurrencyShims 11 | extension BugfenderSDK.Bugfender { 12 | public class func print(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 13 | public class func error(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 14 | public class func warning(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 15 | } 16 | public func BFLog(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 17 | public func BFLogWarn(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 18 | public func BFLogErr(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 19 | public func BFLogTrace(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 20 | public func BFLogInfo(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 21 | public func BFLogFatal(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 22 | public func bfprint(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 23 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64/BugfenderSDK.framework/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module BugfenderSDK { 2 | umbrella header "BugfenderSDK.h" 3 | export * 4 | 5 | module * { export * } 6 | } 7 | 8 | module BugfenderSDK.Swift { 9 | header "BugfenderSDK-Swift.h" 10 | requires objc 11 | } 12 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64/BugfenderSDK.framework/PrivacyInfo.xcprivacy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSPrivacyTracking 6 | 7 | NSPrivacyCollectedDataTypes 8 | 9 | 10 | NSPrivacyCollectedDataType 11 | NSPrivacyCollectedDataTypeOtherDiagnosticData 12 | NSPrivacyCollectedDataTypeLinked 13 | 14 | NSPrivacyCollectedDataTypeTracking 15 | 16 | NSPrivacyCollectedDataTypePurposes 17 | 18 | NSPrivacyCollectedDataTypePurposeOther 19 | 20 | 21 | 22 | NSPrivacyAccessedAPITypes 23 | 24 | 25 | NSPrivacyAccessedAPIType 26 | NSPrivacyAccessedAPICategoryUserDefaults 27 | NSPrivacyAccessedAPITypeReasons 28 | 29 | CA92.1 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/BugfenderSDK: -------------------------------------------------------------------------------- 1 | Versions/Current/BugfenderSDK -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Modules: -------------------------------------------------------------------------------- 1 | Versions/Current/Modules -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Resources: -------------------------------------------------------------------------------- 1 | Versions/Current/Resources -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Versions/A/BugfenderSDK: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Versions/A/BugfenderSDK -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Versions/A/Headers/BFDefaultLogInterceptor.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Fran Montiel on 24/1/23. 3 | // Copyright (c) 2023 Beenario GmbH. All rights reserved. 4 | // 5 | 6 | #import 7 | #import "BFLogInterceptor.h" 8 | 9 | /** 10 | * Default BFLogInterceptor that returns the same BFInterceptedLog that receives 11 | */ 12 | @interface BFDefaultLogInterceptor: NSObject 13 | @end 14 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Versions/A/Headers/BFInterceptedLog.h: -------------------------------------------------------------------------------- 1 | // 2 | // BFInterceptedLog.h 3 | // BugfenderSDK 4 | // 5 | // Created by Fran Montiel on 24/1/23. 6 | // Copyright © 2023 Beenario GmbH. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /** 12 | * Intercepted log from NSLog/OSLog 13 | */ 14 | @interface BFInterceptedLog : NSObject 15 | 16 | /** 17 | * Initializes an BFInterceptedLog with a timestamp, text, and log level. 18 | * @note You will usually not need to use this method. 19 | * @param text Text of the log. 20 | * @param level Level of the log. See BFLogLevel enum for possible values. 21 | * @param date Timestamp of the log. 22 | */ 23 | -(instancetype _Nonnull) initWithText: (NSString*_Nonnull) text level: (NSInteger)level date: (NSDate*_Nonnull) date; 24 | 25 | /** 26 | * Line in the source file where the log was originated. 27 | */ 28 | @property (nonatomic, assign) NSInteger line; 29 | 30 | /** 31 | * Level of the log. See BFLogLevel enum for possible values. 32 | */ 33 | @property (nonatomic, assign) NSInteger level; 34 | 35 | /** 36 | * Timestamp of the log. 37 | */ 38 | @property (nonatomic, strong) NSDate * _Nonnull date; 39 | 40 | /** 41 | * Tag (or category) of the log. 42 | */ 43 | @property (nonatomic, strong) NSString * _Nonnull tag; 44 | 45 | /** 46 | * Method of the source file where the log was originated. 47 | */ 48 | @property (nonatomic, strong) NSString * _Nonnull method; 49 | 50 | /** 51 | * Source file name where the log was originated. 52 | */ 53 | @property (nonatomic, strong) NSString * _Nonnull file; 54 | 55 | /** 56 | * Text of the log. 57 | */ 58 | @property (nonatomic, strong) NSString * _Nonnull text; 59 | 60 | @end 61 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Versions/A/Headers/BFLogInterceptor.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSLogInterceptor.h 3 | // BugfenderSDK 4 | // 5 | // Created by Fran Montiel on 24/1/23. 6 | // Copyright © 2023 Beenario GmbH. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "BFInterceptedLog.h" 11 | 12 | /** 13 | * Intercept a log entry from NSLog/OSLog and allow to modify it or to block it. 14 | */ 15 | @protocol BFLogInterceptor 16 | 17 | /** 18 | * Intercept a log entry from NSLog/OSLog and allow to modify it or to block it. 19 | * @param interceptedLog log intercepted 20 | * @return The log entry to be logged. If nil is returned the log entry won't be logged. 21 | */ 22 | - (BFInterceptedLog *)intercept:(BFInterceptedLog *)interceptedLog; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Versions/A/Headers/BFUserFeedbackNavigationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BFUserFeedbackViewController.h 3 | // BugfenderSDK 4 | // 5 | // Created by Rubén Vázquez Otero on 15/10/2018. 6 | // Copyright © 2018 Beenario GmbH. All rights reserved. 7 | // 8 | 9 | #if TARGET_OS_IOS 10 | 11 | #import "BFUserFeedbackViewController.h" 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | /** 16 | * Navigation View Controller containing a BFUserFeedbackNavigationController as rootViewController 17 | */ 18 | @interface BFUserFeedbackNavigationController : UINavigationController 19 | 20 | 21 | 22 | /** 23 | * Root View Controller containing a table with the textfields used to gather feedback 24 | */ 25 | @property (nonatomic, strong) BFUserFeedbackViewController *feedbackViewController; 26 | 27 | /** 28 | Provides a View Controller to gather the feedback of the users and sent it to Bugfender. 29 | The returning BFUserFeedbackNavigationController has to be presented modally and it has it's own Send and Cancel buttons 30 | 31 | Additionally, it is possible to customize the aspect of the screen accessing BFUserFeedbackNavigationController.feedbackViewController 32 | 33 | @param title Title for the navigation bar 34 | @param hint Short text at the beginning 35 | @param subjectPlaceholder placeholder in the subject textfield 36 | @param messagePlaceholder placeholder in the message textfield 37 | @param sendButtonTitle title for the send button in the navigation bar 38 | @param cancelButtonTitle title for the cancel button 39 | @return BFUserFeedbackNavigationController containing a BFUserFeedbackViewController as root view controller 40 | */ 41 | + (BFUserFeedbackNavigationController *)userFeedbackViewControllerWithTitle:(NSString *)title 42 | hint:(NSString *)hint 43 | subjectPlaceholder:(NSString *)subjectPlaceholder 44 | messagePlaceholder:(NSString *)messagePlaceholder 45 | sendButtonTitle:(NSString *)sendButtonTitle 46 | cancelButtonTitle:(NSString *)cancelButtonTitle 47 | completion:(void (^)(BOOL feedbackSent, NSURL * _Nullable url))completionBlock; 48 | 49 | 50 | @end 51 | 52 | NS_ASSUME_NONNULL_END 53 | #endif 54 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Versions/A/Headers/BFUserFeedbackViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BFUserFeedbackViewController.h 3 | // BugfenderSDK 4 | // 5 | // Created by Rubén Vázquez Otero on 16/10/2018. 6 | // Copyright © 2018 Beenario GmbH. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /** 14 | * BFUserFeedbackViewController provides a basic and configurable view controller to gather feedback from the users 15 | */ 16 | @interface BFUserFeedbackViewController : UITableViewController { 17 | 18 | } 19 | 20 | #pragma mark - Background colors 21 | 22 | /** 23 | The background of the view controller 24 | */ 25 | @property (nonatomic, strong) UIColor *mainBackgroundColor; 26 | 27 | /** 28 | Background for textfields 29 | */ 30 | @property (nonatomic, strong) UIColor *secondaryBackgroundColor; 31 | 32 | #pragma mark - Hint 33 | 34 | /** 35 | The hint is the upper text in the view controller. 36 | Use the hint give instructions to your users or just to thank them for providing feedback 37 | */ 38 | @property (nonatomic, strong) NSString *hint; 39 | 40 | /** 41 | * Font from the hint 42 | */ 43 | @property (nonatomic, strong) UIFont *hintFont; 44 | 45 | /** 46 | * Font color from the hint 47 | */ 48 | @property (nonatomic, strong) UIColor *hintFontColor; 49 | 50 | #pragma mark - Subject 51 | 52 | /** 53 | The subject of the feedback. 54 | Remember to provide a placeholder 55 | */ 56 | @property (nonatomic, strong) UIFont *subjectFont; 57 | 58 | /** 59 | * Font color from the subject textfield 60 | */ 61 | @property (nonatomic, strong) UIColor *subjectFontColor; 62 | 63 | /** 64 | * Font color for the placeholder of the subject textfield 65 | */ 66 | @property (nonatomic, strong) UIColor *subjectPlaceholderFontColor; 67 | 68 | /** 69 | * Subject placeholder 70 | */ 71 | @property (nonatomic, strong) NSString *subjectPlaceholder; 72 | 73 | #pragma mark - Message 74 | /** 75 | The message of the feedback 76 | Remember to provide a placeholder 77 | */ 78 | @property (nonatomic, strong) UIFont *messageFont; 79 | 80 | /** 81 | * Message font color 82 | */ 83 | @property (nonatomic, strong) UIColor *messageFontColor; 84 | 85 | /** 86 | * Message placeholder font color 87 | */ 88 | @property (nonatomic, strong) UIColor *messagePlaceholderFontColor; 89 | 90 | /** 91 | * Message placeholder 92 | */ 93 | @property (nonatomic, strong) NSString *messagePlaceholder; 94 | 95 | #pragma mark - Actions 96 | 97 | /** 98 | * Hide view controller 99 | */ 100 | - (void)dismiss; 101 | 102 | /** 103 | * Send feedback to Bugfender 104 | */ 105 | - (void)sendFeedback; 106 | 107 | /** 108 | Pass a block if you want to be notified after feedback was sent (or not) 109 | */ 110 | @property (nonatomic, copy) void (^completionBlock)(BOOL feedbackSent, NSURL * _Nullable url); 111 | 112 | @end 113 | 114 | NS_ASSUME_NONNULL_END 115 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Versions/A/Modules/BugfenderSDK.swiftmodule/arm64-apple-ios-macabi.private.swiftinterface: -------------------------------------------------------------------------------- 1 | // swift-interface-format-version: 1.0 2 | // swift-compiler-version: Apple Swift version 6.0.3 effective-5.10 (swiftlang-6.0.3.1.10 clang-1600.0.30.1) 3 | // swift-module-flags: -target arm64-apple-ios13.1-macabi -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-bare-slash-regex -module-name BugfenderSDK 4 | // swift-module-flags-ignorable: -no-verify-emitted-module-interface 5 | @_exported import BugfenderSDK 6 | import Foundation 7 | import Swift 8 | import _Concurrency 9 | import _StringProcessing 10 | import _SwiftConcurrencyShims 11 | extension BugfenderSDK.Bugfender { 12 | public class func print(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 13 | public class func error(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 14 | public class func warning(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 15 | } 16 | public func BFLog(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 17 | public func BFLogWarn(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 18 | public func BFLogErr(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 19 | public func BFLogTrace(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 20 | public func BFLogInfo(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 21 | public func BFLogFatal(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 22 | public func bfprint(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 23 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Versions/A/Modules/BugfenderSDK.swiftmodule/arm64-apple-ios-macabi.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Versions/A/Modules/BugfenderSDK.swiftmodule/arm64-apple-ios-macabi.swiftdoc -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Versions/A/Modules/BugfenderSDK.swiftmodule/arm64-apple-ios-macabi.swiftinterface: -------------------------------------------------------------------------------- 1 | // swift-interface-format-version: 1.0 2 | // swift-compiler-version: Apple Swift version 6.0.3 effective-5.10 (swiftlang-6.0.3.1.10 clang-1600.0.30.1) 3 | // swift-module-flags: -target arm64-apple-ios13.1-macabi -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-bare-slash-regex -module-name BugfenderSDK 4 | // swift-module-flags-ignorable: -no-verify-emitted-module-interface 5 | @_exported import BugfenderSDK 6 | import Foundation 7 | import Swift 8 | import _Concurrency 9 | import _StringProcessing 10 | import _SwiftConcurrencyShims 11 | extension BugfenderSDK.Bugfender { 12 | public class func print(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 13 | public class func error(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 14 | public class func warning(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 15 | } 16 | public func BFLog(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 17 | public func BFLogWarn(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 18 | public func BFLogErr(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 19 | public func BFLogTrace(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 20 | public func BFLogInfo(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 21 | public func BFLogFatal(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 22 | public func bfprint(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 23 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Versions/A/Modules/BugfenderSDK.swiftmodule/x86_64-apple-ios-macabi.private.swiftinterface: -------------------------------------------------------------------------------- 1 | // swift-interface-format-version: 1.0 2 | // swift-compiler-version: Apple Swift version 6.0.3 effective-5.10 (swiftlang-6.0.3.1.10 clang-1600.0.30.1) 3 | // swift-module-flags: -target x86_64-apple-ios13.1-macabi -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-bare-slash-regex -module-name BugfenderSDK 4 | // swift-module-flags-ignorable: -no-verify-emitted-module-interface 5 | @_exported import BugfenderSDK 6 | import Foundation 7 | import Swift 8 | import _Concurrency 9 | import _StringProcessing 10 | import _SwiftConcurrencyShims 11 | extension BugfenderSDK.Bugfender { 12 | public class func print(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 13 | public class func error(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 14 | public class func warning(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 15 | } 16 | public func BFLog(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 17 | public func BFLogWarn(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 18 | public func BFLogErr(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 19 | public func BFLogTrace(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 20 | public func BFLogInfo(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 21 | public func BFLogFatal(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 22 | public func bfprint(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 23 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Versions/A/Modules/BugfenderSDK.swiftmodule/x86_64-apple-ios-macabi.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Versions/A/Modules/BugfenderSDK.swiftmodule/x86_64-apple-ios-macabi.swiftdoc -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Versions/A/Modules/BugfenderSDK.swiftmodule/x86_64-apple-ios-macabi.swiftinterface: -------------------------------------------------------------------------------- 1 | // swift-interface-format-version: 1.0 2 | // swift-compiler-version: Apple Swift version 6.0.3 effective-5.10 (swiftlang-6.0.3.1.10 clang-1600.0.30.1) 3 | // swift-module-flags: -target x86_64-apple-ios13.1-macabi -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-bare-slash-regex -module-name BugfenderSDK 4 | // swift-module-flags-ignorable: -no-verify-emitted-module-interface 5 | @_exported import BugfenderSDK 6 | import Foundation 7 | import Swift 8 | import _Concurrency 9 | import _StringProcessing 10 | import _SwiftConcurrencyShims 11 | extension BugfenderSDK.Bugfender { 12 | public class func print(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 13 | public class func error(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 14 | public class func warning(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 15 | } 16 | public func BFLog(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 17 | public func BFLogWarn(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 18 | public func BFLogErr(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 19 | public func BFLogTrace(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 20 | public func BFLogInfo(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 21 | public func BFLogFatal(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 22 | public func bfprint(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 23 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Versions/A/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module BugfenderSDK { 2 | umbrella header "BugfenderSDK.h" 3 | export * 4 | 5 | module * { export * } 6 | } 7 | 8 | module BugfenderSDK.Swift { 9 | header "BugfenderSDK-Swift.h" 10 | requires objc 11 | } 12 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Versions/A/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 23G93 7 | CFBundleDevelopmentRegion 8 | en 9 | CFBundleExecutable 10 | BugfenderSDK 11 | CFBundleIdentifier 12 | com.bugfender.BugfenderSDK 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | BugfenderSDK 17 | CFBundlePackageType 18 | FMWK 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSupportedPlatforms 22 | 23 | MacOSX 24 | 25 | CFBundleVersion 26 | 1 27 | DTCompiler 28 | com.apple.compilers.llvm.clang.1_0 29 | DTPlatformBuild 30 | 24C94 31 | DTPlatformName 32 | macosx 33 | DTPlatformVersion 34 | 15.2 35 | DTSDKBuild 36 | 24C94 37 | DTSDKName 38 | macosx15.2 39 | DTXcode 40 | 1620 41 | DTXcodeBuild 42 | 16C5032a 43 | LSMinimumSystemVersion 44 | 10.15 45 | UIDeviceFamily 46 | 47 | 2 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Versions/A/Resources/PrivacyInfo.xcprivacy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSPrivacyTracking 6 | 7 | NSPrivacyCollectedDataTypes 8 | 9 | 10 | NSPrivacyCollectedDataType 11 | NSPrivacyCollectedDataTypeOtherDiagnosticData 12 | NSPrivacyCollectedDataTypeLinked 13 | 14 | NSPrivacyCollectedDataTypeTracking 15 | 16 | NSPrivacyCollectedDataTypePurposes 17 | 18 | NSPrivacyCollectedDataTypePurposeOther 19 | 20 | 21 | 22 | NSPrivacyAccessedAPITypes 23 | 24 | 25 | NSPrivacyAccessedAPIType 26 | NSPrivacyAccessedAPICategoryUserDefaults 27 | NSPrivacyAccessedAPITypeReasons 28 | 29 | CA92.1 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-maccatalyst/BugfenderSDK.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/BugfenderSDK: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/BugfenderSDK -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/Headers/BFDefaultLogInterceptor.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Fran Montiel on 24/1/23. 3 | // Copyright (c) 2023 Beenario GmbH. All rights reserved. 4 | // 5 | 6 | #import 7 | #import "BFLogInterceptor.h" 8 | 9 | /** 10 | * Default BFLogInterceptor that returns the same BFInterceptedLog that receives 11 | */ 12 | @interface BFDefaultLogInterceptor: NSObject 13 | @end 14 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/Headers/BFInterceptedLog.h: -------------------------------------------------------------------------------- 1 | // 2 | // BFInterceptedLog.h 3 | // BugfenderSDK 4 | // 5 | // Created by Fran Montiel on 24/1/23. 6 | // Copyright © 2023 Beenario GmbH. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /** 12 | * Intercepted log from NSLog/OSLog 13 | */ 14 | @interface BFInterceptedLog : NSObject 15 | 16 | /** 17 | * Initializes an BFInterceptedLog with a timestamp, text, and log level. 18 | * @note You will usually not need to use this method. 19 | * @param text Text of the log. 20 | * @param level Level of the log. See BFLogLevel enum for possible values. 21 | * @param date Timestamp of the log. 22 | */ 23 | -(instancetype _Nonnull) initWithText: (NSString*_Nonnull) text level: (NSInteger)level date: (NSDate*_Nonnull) date; 24 | 25 | /** 26 | * Line in the source file where the log was originated. 27 | */ 28 | @property (nonatomic, assign) NSInteger line; 29 | 30 | /** 31 | * Level of the log. See BFLogLevel enum for possible values. 32 | */ 33 | @property (nonatomic, assign) NSInteger level; 34 | 35 | /** 36 | * Timestamp of the log. 37 | */ 38 | @property (nonatomic, strong) NSDate * _Nonnull date; 39 | 40 | /** 41 | * Tag (or category) of the log. 42 | */ 43 | @property (nonatomic, strong) NSString * _Nonnull tag; 44 | 45 | /** 46 | * Method of the source file where the log was originated. 47 | */ 48 | @property (nonatomic, strong) NSString * _Nonnull method; 49 | 50 | /** 51 | * Source file name where the log was originated. 52 | */ 53 | @property (nonatomic, strong) NSString * _Nonnull file; 54 | 55 | /** 56 | * Text of the log. 57 | */ 58 | @property (nonatomic, strong) NSString * _Nonnull text; 59 | 60 | @end 61 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/Headers/BFLogInterceptor.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSLogInterceptor.h 3 | // BugfenderSDK 4 | // 5 | // Created by Fran Montiel on 24/1/23. 6 | // Copyright © 2023 Beenario GmbH. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "BFInterceptedLog.h" 11 | 12 | /** 13 | * Intercept a log entry from NSLog/OSLog and allow to modify it or to block it. 14 | */ 15 | @protocol BFLogInterceptor 16 | 17 | /** 18 | * Intercept a log entry from NSLog/OSLog and allow to modify it or to block it. 19 | * @param interceptedLog log intercepted 20 | * @return The log entry to be logged. If nil is returned the log entry won't be logged. 21 | */ 22 | - (BFInterceptedLog *)intercept:(BFInterceptedLog *)interceptedLog; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/Headers/BFUserFeedbackNavigationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BFUserFeedbackViewController.h 3 | // BugfenderSDK 4 | // 5 | // Created by Rubén Vázquez Otero on 15/10/2018. 6 | // Copyright © 2018 Beenario GmbH. All rights reserved. 7 | // 8 | 9 | #if TARGET_OS_IOS 10 | 11 | #import "BFUserFeedbackViewController.h" 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | /** 16 | * Navigation View Controller containing a BFUserFeedbackNavigationController as rootViewController 17 | */ 18 | @interface BFUserFeedbackNavigationController : UINavigationController 19 | 20 | 21 | 22 | /** 23 | * Root View Controller containing a table with the textfields used to gather feedback 24 | */ 25 | @property (nonatomic, strong) BFUserFeedbackViewController *feedbackViewController; 26 | 27 | /** 28 | Provides a View Controller to gather the feedback of the users and sent it to Bugfender. 29 | The returning BFUserFeedbackNavigationController has to be presented modally and it has it's own Send and Cancel buttons 30 | 31 | Additionally, it is possible to customize the aspect of the screen accessing BFUserFeedbackNavigationController.feedbackViewController 32 | 33 | @param title Title for the navigation bar 34 | @param hint Short text at the beginning 35 | @param subjectPlaceholder placeholder in the subject textfield 36 | @param messagePlaceholder placeholder in the message textfield 37 | @param sendButtonTitle title for the send button in the navigation bar 38 | @param cancelButtonTitle title for the cancel button 39 | @return BFUserFeedbackNavigationController containing a BFUserFeedbackViewController as root view controller 40 | */ 41 | + (BFUserFeedbackNavigationController *)userFeedbackViewControllerWithTitle:(NSString *)title 42 | hint:(NSString *)hint 43 | subjectPlaceholder:(NSString *)subjectPlaceholder 44 | messagePlaceholder:(NSString *)messagePlaceholder 45 | sendButtonTitle:(NSString *)sendButtonTitle 46 | cancelButtonTitle:(NSString *)cancelButtonTitle 47 | completion:(void (^)(BOOL feedbackSent, NSURL * _Nullable url))completionBlock; 48 | 49 | 50 | @end 51 | 52 | NS_ASSUME_NONNULL_END 53 | #endif 54 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/Headers/BFUserFeedbackViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BFUserFeedbackViewController.h 3 | // BugfenderSDK 4 | // 5 | // Created by Rubén Vázquez Otero on 16/10/2018. 6 | // Copyright © 2018 Beenario GmbH. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /** 14 | * BFUserFeedbackViewController provides a basic and configurable view controller to gather feedback from the users 15 | */ 16 | @interface BFUserFeedbackViewController : UITableViewController { 17 | 18 | } 19 | 20 | #pragma mark - Background colors 21 | 22 | /** 23 | The background of the view controller 24 | */ 25 | @property (nonatomic, strong) UIColor *mainBackgroundColor; 26 | 27 | /** 28 | Background for textfields 29 | */ 30 | @property (nonatomic, strong) UIColor *secondaryBackgroundColor; 31 | 32 | #pragma mark - Hint 33 | 34 | /** 35 | The hint is the upper text in the view controller. 36 | Use the hint give instructions to your users or just to thank them for providing feedback 37 | */ 38 | @property (nonatomic, strong) NSString *hint; 39 | 40 | /** 41 | * Font from the hint 42 | */ 43 | @property (nonatomic, strong) UIFont *hintFont; 44 | 45 | /** 46 | * Font color from the hint 47 | */ 48 | @property (nonatomic, strong) UIColor *hintFontColor; 49 | 50 | #pragma mark - Subject 51 | 52 | /** 53 | The subject of the feedback. 54 | Remember to provide a placeholder 55 | */ 56 | @property (nonatomic, strong) UIFont *subjectFont; 57 | 58 | /** 59 | * Font color from the subject textfield 60 | */ 61 | @property (nonatomic, strong) UIColor *subjectFontColor; 62 | 63 | /** 64 | * Font color for the placeholder of the subject textfield 65 | */ 66 | @property (nonatomic, strong) UIColor *subjectPlaceholderFontColor; 67 | 68 | /** 69 | * Subject placeholder 70 | */ 71 | @property (nonatomic, strong) NSString *subjectPlaceholder; 72 | 73 | #pragma mark - Message 74 | /** 75 | The message of the feedback 76 | Remember to provide a placeholder 77 | */ 78 | @property (nonatomic, strong) UIFont *messageFont; 79 | 80 | /** 81 | * Message font color 82 | */ 83 | @property (nonatomic, strong) UIColor *messageFontColor; 84 | 85 | /** 86 | * Message placeholder font color 87 | */ 88 | @property (nonatomic, strong) UIColor *messagePlaceholderFontColor; 89 | 90 | /** 91 | * Message placeholder 92 | */ 93 | @property (nonatomic, strong) NSString *messagePlaceholder; 94 | 95 | #pragma mark - Actions 96 | 97 | /** 98 | * Hide view controller 99 | */ 100 | - (void)dismiss; 101 | 102 | /** 103 | * Send feedback to Bugfender 104 | */ 105 | - (void)sendFeedback; 106 | 107 | /** 108 | Pass a block if you want to be notified after feedback was sent (or not) 109 | */ 110 | @property (nonatomic, copy) void (^completionBlock)(BOOL feedbackSent, NSURL * _Nullable url); 111 | 112 | @end 113 | 114 | NS_ASSUME_NONNULL_END 115 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/Headers/BugfenderSDK.h: -------------------------------------------------------------------------------- 1 | // 2 | // BugfenderSDK.h 3 | // BugfenderSDK 4 | // Copyright (c) 2014 Bugfender GmbH. All rights reserved. 5 | // 6 | 7 | #import 8 | #import "BFLogInterceptor.h" 9 | #import "BFDefaultLogInterceptor.h" 10 | 11 | #if TARGET_OS_IOS 12 | 13 | #import "BFUserFeedbackNavigationController.h" 14 | 15 | #endif 16 | 17 | NS_ASSUME_NONNULL_BEGIN 18 | 19 | #define BFLibraryVersionNumber_0_1_0 0 20 | #define BFLibraryVersionNumber_0_2_0 1 21 | #define BFLibraryVersionNumber_0_2_1 2 22 | #define BFLibraryVersionNumber_0_3_0 3 23 | #define BFLibraryVersionNumber_0_3_1 4 24 | #define BFLibraryVersionNumber_0_3_2 5 25 | #define BFLibraryVersionNumber_0_3_3 6 26 | #define BFLibraryVersionNumber_0_3_4 7 27 | #define BFLibraryVersionNumber_0_3_5 8 28 | #define BFLibraryVersionNumber_0_3_6 9 29 | #define BFLibraryVersionNumber_0_3_7 10 30 | #define BFLibraryVersionNumber_0_3_8 11 31 | #define BFLibraryVersionNumber_0_3_9 12 32 | #define BFLibraryVersionNumber_0_3_10 13 33 | #define BFLibraryVersionNumber_0_3_11 14 34 | #define BFLibraryVersionNumber_0_3_12 15 35 | #define BFLibraryVersionNumber_0_3_13 16 36 | #define BFLibraryVersionNumber_0_3_14 17 37 | #define BFLibraryVersionNumber_0_3_15 18 38 | #define BFLibraryVersionNumber_0_3_16 19 39 | #define BFLibraryVersionNumber_0_3_17 20 40 | #define BFLibraryVersionNumber_0_3_18 21 41 | #define BFLibraryVersionNumber_0_3_19 22 42 | #define BFLibraryVersionNumber_0_3_20 23 43 | #define BFLibraryVersionNumber_0_3_21 24 44 | #define BFLibraryVersionNumber_0_3_22 25 45 | #define BFLibraryVersionNumber_0_3_23 26 46 | #define BFLibraryVersionNumber_0_3_24 27 47 | #define BFLibraryVersionNumber_0_3_25 28 48 | #define BFLibraryVersionNumber_0_3_26 29 49 | #define BFLibraryVersionNumber_0_3_27 30 50 | #define BFLibraryVersionNumber_1_4_0 31 51 | #define BFLibraryVersionNumber_1_4_1 32 52 | #define BFLibraryVersionNumber_1_4_2 33 53 | #define BFLibraryVersionNumber_1_4_3 34 54 | #define BFLibraryVersionNumber_1_4_4 34 // Mistake: We released the version without incrementing the number. 55 | #define BFLibraryVersionNumber_1_4_5 36 56 | #define BFLibraryVersionNumber_1_4_6 37 57 | #define BFLibraryVersionNumber_1_4_7 38 58 | #define BFLibraryVersionNumber_1_4_8 39 59 | #define BFLibraryVersionNumber_1_4_9 40 60 | #define BFLibraryVersionNumber_1_4_10 41 61 | #define BFLibraryVersionNumber_1_5_0 42 62 | #define BFLibraryVersionNumber_1_5_1 43 63 | #define BFLibraryVersionNumber_1_5_2 44 64 | #define BFLibraryVersionNumber_1_5_3 45 65 | #define BFLibraryVersionNumber_1_5_4 46 66 | #define BFLibraryVersionNumber_1_5_5 47 67 | #define BFLibraryVersionNumber_1_5_6 48 68 | #define BFLibraryVersionNumber_1_6_0 49 69 | #define BFLibraryVersionNumber_1_6_1 50 70 | #define BFLibraryVersionNumber_1_6_2 51 71 | #define BFLibraryVersionNumber_1_6_3 52 72 | #define BFLibraryVersionNumber_1_6_4 53 73 | #define BFLibraryVersionNumber_1_6_5 54 74 | #define BFLibraryVersionNumber_1_6_6 55 75 | #define BFLibraryVersionNumber_1_7_0 56 76 | #define BFLibraryVersionNumber_1_8_0 57 77 | #define BFLibraryVersionNumber_1_9_0 58 78 | #define BFLibraryVersionNumber_1_9_1 59 79 | #define BFLibraryVersionNumber_1_9_2 60 80 | #define BFLibraryVersionNumber_1_10_0 61 81 | #define BFLibraryVersionNumber_1_10_1 62 82 | #define BFLibraryVersionNumber_1_10_2 63 83 | #define BFLibraryVersionNumber_1_10_3 64 84 | #define BFLibraryVersionNumber_1_10_4 65 85 | #define BFLibraryVersionNumber_1_10_5 66 86 | #define BFLibraryVersionNumber_1_10_6 67 87 | #define BFLibraryVersionNumber_1_11_0 68 88 | #define BFLibraryVersionNumber_1_12_0 69 89 | #define BFLibraryVersionNumber_1_12_1 70 90 | #define BFLibraryVersionNumber_1_12_2 71 91 | #define BFLibraryVersionNumber_1_13_0 72 92 | #define BFLibraryVersionNumber_1_13_1 73 93 | #define BFLibraryVersionNumber_1_13_2 74 94 | #define BFLibraryVersionNumber_2_0_0 75 95 | #define BFLibraryVersionNumber_2_0_1 76 96 | 97 | /** 98 | * Current Bugfender version number. 99 | * @note This value can be compared with the defined macros BFLibraryVersionNumber_X_Y_Z. 100 | **/ 101 | FOUNDATION_EXPORT double const BFLibraryVersionNumber; 102 | 103 | /** Defines the level of a log */ 104 | typedef NS_ENUM(NSUInteger, BFLogLevel) 105 | { 106 | /** Default/Debug log level */ 107 | BFLogLevelDefault = 0, 108 | /** Warning log level */ 109 | BFLogLevelWarning = 1, 110 | /** Error log level */ 111 | BFLogLevelError = 2, 112 | /** Trace log level */ 113 | BFLogLevelTrace = 3, 114 | /** Info log level */ 115 | BFLogLevelInfo = 4, 116 | /** Fatal log level */ 117 | BFLogLevelFatal = 5 118 | }; 119 | 120 | #define BFLog(args, ...) BFLog2(BFLogLevelDefault, nil, args, ##__VA_ARGS__) 121 | #define BFLogWarn(args, ...) BFLog2(BFLogLevelWarning, nil, args, ##__VA_ARGS__) 122 | #define BFLogErr(args, ...) BFLog2(BFLogLevelError, nil, args, ##__VA_ARGS__) 123 | #define BFLogTrace(args, ...) BFLog2(BFLogLevelTrace, nil, args, ##__VA_ARGS__) 124 | #define BFLogInfo(args, ...) BFLog2(BFLogLevelInfo, nil, args, ##__VA_ARGS__) 125 | #define BFLogFatal(args, ...) BFLog2(BFLogLevelFatal, nil, args, ##__VA_ARGS__) 126 | 127 | #define BFLog2(logLevel, tagName, fmt, ...) \ 128 | [Bugfender logWithLineNumber:__LINE__ method:[NSString stringWithFormat:@"%s",__PRETTY_FUNCTION__] file:[[NSString stringWithFormat:@"%s",__FILE__] lastPathComponent] level:logLevel tag:tagName message:fmt == nil ? @"" : [NSString stringWithFormat:fmt, ##__VA_ARGS__]] 129 | 130 | 131 | 132 | /** 133 | * Main Bugfender interface. 134 | **/ 135 | @interface Bugfender : NSObject 136 | 137 | /** ******************************************************************** ** 138 | * @name Configuration 139 | ** ******************************************************************** **/ 140 | 141 | /** 142 | * Sets the URL of the API 143 | * @note Usage of this function is not necessary in the general use case. Please use exclusively when 144 | * directed from technical support. 145 | * @warning This method must be called before activateLogger. 146 | * @param url URL of the API to use 147 | */ 148 | + (void)setApiURL:(NSURL*)url; 149 | 150 | /** 151 | * Sets the URL of the Bugfender Dashboard 152 | * @note Usage of this function is not necessary in the general use case. Please use exclusively when 153 | * directed from technical support. 154 | * @warning This method must be called before activateLogger. 155 | * @param url base URL of the Bugfender's dashboard 156 | */ 157 | + (void)setBaseURL:(NSURL*)url; 158 | 159 | /** 160 | * Activates the Bugfender logger for a specific app. 161 | * @param appKey The app key of the Bugfender application, get it in bugfender.com 162 | * @warning If Bugfender has already been initialized with a different app key `NSInvalidArgumentException` will be thrown. 163 | * @note This method needs to be called before any `BFLog` call, otherwise they will be ignored. 164 | **/ 165 | + (void)activateLogger:(NSString*)appKey; 166 | 167 | /** 168 | * Returns the app key. 169 | * @return The app key, or nil if Bugfender has not been initialized. 170 | **/ 171 | + (nullable NSString*)appKey; 172 | 173 | /** 174 | * Maximum space available to store local logs. This value is represented in bytes. Default value is 5242880 (1024*1024*5 = 5MB). 175 | * @note If maximumLocalStorageSize is 0 (zero), then there is no limit and everything will be stored locally. 176 | **/ 177 | + (NSUInteger)maximumLocalStorageSize; 178 | 179 | /** 180 | * Set the maximum space available to store local logs. This value is represented in bytes. There's a limit of 50 MB. 181 | * @param maximumLocalStorageSize Maximum size in bytes. Range accepted is from 1 MB to 50 MB. If the value provider 182 | * is below this range it will be set to 1 MB, if is above the range it will be set to 50 MB 183 | **/ 184 | + (void)setMaximumLocalStorageSize:(NSUInteger)maximumLocalStorageSize; 185 | 186 | /** 187 | * Returns the device identifier used to identify the current device in the Bugfender website. 188 | * The device identifier is constant while the application is installed in the device. 189 | * @note This string can not be changed, but can be shown to the user or sent to your server, in order to 190 | * keep a relationship between a Bugfender device and a user or some other important event in your application. 191 | * 192 | * @return A string identifying the device. 193 | **/ 194 | + (NSString*)deviceIdentifier __deprecated_msg("Use deviceIdentifierUrl instead."); 195 | 196 | /** 197 | * Returns a URL linking to the current device in bugfender. 198 | * The device identifier is constant while the application is installed in the device. 199 | * @note This url can be sent to your server and used to create integrations with other services. Also can be stored to 200 | * keep a relationship between a Bugfender device and a user or some other important event in your application. 201 | * 202 | * @return URL linking to the device in Bugfender 203 | **/ 204 | + (nullable NSURL *)deviceIdentifierUrl; 205 | 206 | /** 207 | * 208 | * The session identifier is constant while the application is running. 209 | * @return A string identifying the current session. 210 | */ 211 | + (nullable NSString *)sessionIdentifier __deprecated_msg("Use sessionIdentifierUrl instead."); 212 | 213 | /** 214 | * 215 | * The session identifier url is constant while the application is running. 216 | * @note This url can be sent to your server and used to create integrations with other services. 217 | * @return A URL linking to the current session in Bugfender. 218 | */ 219 | + (nullable NSURL *)sessionIdentifierUrl; 220 | 221 | /** 222 | * Synchronizes all logs with the server all the time, regardless if this device is enabled or not. 223 | * @note This method is useful when the logs should be sent to the server 224 | * regardless if the device is enabled in the Bugfender Console. 225 | * 226 | * Logs are synchronized continuously while forceEnabled is active. 227 | * 228 | * This command can be called anytime, and will take effect the next time the device is online. 229 | * @param enabled Whether logs should be sent regardless of the Bugfender Console settings. 230 | */ 231 | +(void) setForceEnabled:(BOOL)enabled; 232 | 233 | /** 234 | * Gets the status of forceEnabled. 235 | * @see setForceEnabled 236 | */ 237 | +(BOOL) forceEnabled; 238 | 239 | /** 240 | * Prints messages to console for debugging purposes. 241 | * @param enabled Whether printing to console is enabled or not. By default it is enabled. 242 | */ 243 | +(void) setPrintToConsole:(BOOL)enabled; 244 | 245 | /** 246 | * Gets the status of printToConsole. printToConsole prints messages to console. By default it is enabled. 247 | */ 248 | +(BOOL) printToConsole; 249 | 250 | #if TARGET_OS_IOS 251 | /** 252 | * Logs all actions performed and screen changes in the application, such as button touches, swipes and gestures. 253 | */ 254 | +(void)enableUIEventLogging; 255 | 256 | /** 257 | * Logs all actions performed and screen changes in the application, such as button touches, swipes and gestures. 258 | * @param ignoredViewsTags Tags of views that should not be observed and logged by Bugfender 259 | */ 260 | + (void)enableUIEventLoggingWithIgnoredViewsTags:(NSArray *)ignoredViewsTags; 261 | 262 | #endif 263 | 264 | /** 265 | * Enable crash reporting tool functionality. 266 | */ 267 | +(void)enableCrashReporting; 268 | 269 | /** ******************************************************************** ** 270 | * @name Device details 271 | ** ******************************************************************** **/ 272 | 273 | /** 274 | * Sets the name for the device. If the Device Name is not set, then the iOS standard device name will be automatically sent 275 | * @note This method has to be called prior to activate logger. Otherwise, an exception will be thrown. 276 | * @param deviceName Device name that will be shown in the Dashboard. 277 | */ 278 | +(void)overrideDeviceName:(NSString *)deviceName __deprecated_msg("Use setDeviceString:forKey: instead, which allows to change the name once set. This function will be removed in a future version."); 279 | 280 | /** 281 | * Sets a device detail with boolean type. 282 | * @note Similarly to an NSDictionary, where you can set key-value pairs 283 | * related to a Bugfender device. 284 | * @param b A boolean value. 285 | * @param key Key. 286 | */ 287 | +(void)setDeviceBOOL:(BOOL)b forKey:(NSString*)key; 288 | /** 289 | * Sets a device detail with string type. 290 | * @note Similarly to an NSDictionary, where you can set key-value pairs 291 | * related to a Bugfender device. 292 | * @param s A string value. The maximum length allowed is 192 bytes. 293 | * @param key Key. 294 | */ 295 | +(void)setDeviceString:(NSString*)s forKey:(NSString*)key; 296 | /** 297 | * Sets a device detail with integer type. 298 | * @note Similarly to an NSDictionary, where you can set key-value pairs 299 | * related to a Bugfender device. 300 | * @param i An UInt64 value. 301 | * @param key Key. 302 | */ 303 | +(void)setDeviceInteger:(UInt64)i forKey:(NSString*)key; 304 | /** 305 | * Sets a device detail with double type. 306 | * @note Similarly to an NSDictionary, where you can set key-value pairs 307 | * related to a Bugfender device. 308 | * @param d A double value. 309 | * @param key Key. 310 | */ 311 | +(void)setDeviceDouble:(double)d forKey:(NSString*)key; 312 | /** 313 | * Removes a device detail. 314 | * @note Similarly to an NSDictionary, where you can remove an existent key-value pair 315 | * related to a Bugfender device by indicating its key. 316 | * @param key Key. 317 | */ 318 | +(void)removeDeviceKey:(NSString*)key; 319 | 320 | /** ******************************************************************** ** 321 | * @name Logging 322 | ** ******************************************************************** **/ 323 | 324 | /** 325 | * Bugfender extended interface for logging, which takes a simple string as log message. 326 | * @note This command can be called anytime, and will take effect the next time the device is online. 327 | * For efficiency, several log lines can be sent together to the server with some delay. 328 | * @param lineNumber The line number of the log. 329 | * @param method The method where the log has happened. 330 | * @param file The file where the log has happened. 331 | * @param level Log level. 332 | * @param tag Tag to be applied to the log line. 333 | * @param message Message to be logged. The message will be logged verbatim, no interpretation will be performed. 334 | * @note In Swift, prefer to use bfprint() in order to get file name and line number filled in automatically. In Objective-C you can use the BFLog or BFLog2 macros. 335 | **/ 336 | + (void) logWithLineNumber:(NSInteger)lineNumber method:(NSString*)method file:(NSString*)file level:(BFLogLevel)level tag:(nullable NSString*)tag message:(NSString*)message NS_SWIFT_NAME(log(lineNumber:method:file:level:tag:message:)); 337 | 338 | /** ******************************************************************** ** 339 | * @name Commands 340 | ** ******************************************************************** **/ 341 | 342 | /** 343 | * Synchronizes all logs with the server once, regardless if this device is enabled or not. 344 | * @note This method is useful when an error condition is detected and the logs should be sent to 345 | * the server for analysis, regardless if the device is enabled in the Bugfender Console. 346 | * 347 | * Logs are synchronized only once. After that, the logs are again sent according to the enabled flag 348 | * in the Bugfender Console. 349 | * 350 | * This command can be called anytime, and will take effect the next time the device is online. 351 | */ 352 | + (void) forceSendOnce; 353 | 354 | #pragma mark - Issues 355 | /** 356 | * Sends an issue 357 | * @note Sending an issue forces the logs of the current session being sent 358 | * to the server, and marks the session so that it is highlighted in the web console. 359 | * @param title Short description of the issue. 360 | * @param text Full details of the issue. Markdown format is accepted. 361 | * @return the issue identifier 362 | */ 363 | + (nullable NSString *)sendIssueWithTitle:(NSString *)title text:(NSString *)text __deprecated_msg("Use sendIssueReturningUrlWithTitle:text: instead."); 364 | 365 | /** 366 | * Sends an issue 367 | * @note Sending an issue forces the logs of the current session being sent 368 | * to the server, and marks the session so that it is highlighted in the web console. 369 | * @param title Short description of the issue. 370 | * @param text Full details of the issue. Markdown format is accepted. 371 | * @return an URL linking to the issue in Bugfender 372 | */ 373 | + (nullable NSURL *)sendIssueReturningUrlWithTitle:(NSString *)title text:(NSString *)text; 374 | 375 | #pragma mark - Crashes 376 | 377 | /** 378 | * Sends a crash 379 | * @note This method will send immediately a crash to the server 380 | * it doesn't take into account if crash reporting is enabled or not 381 | * @param title Short description of the crash. 382 | * @param text Full details of the crarsh. 383 | * @return an URL linking to the crash in Bugfender 384 | */ 385 | + (nullable NSURL *)sendCrashWithTitle:(NSString *)title text:(NSString *)text; 386 | 387 | #if TARGET_OS_IOS 388 | 389 | #pragma mark - User Feedback 390 | 391 | /** 392 | Provides a View Controller to gather the feedback of the users and sent it to Bugfender. 393 | The returning BFUserFeedbackNavigationController has to be presented modally and it has it's own Send and Cancel buttons 394 | 395 | Additionally, it is possible to customize the aspect of the screen accessing BFUserFeedbackNavigationController.feedbackViewController 396 | 397 | @param title Title for the navigation bar 398 | @param hint Short text at the beginning 399 | @param subjectPlaceholder placeholder in the subject textfield 400 | @param messagePlaceholder placeholder in the message textfield 401 | @param sendButtonTitle title for the send button in the navigation bar 402 | @param cancelButtonTitle title for the cancel button 403 | @return BFUserFeedbackNavigationController containing a BFUserFeedbackViewController as root view controller 404 | */ 405 | + (BFUserFeedbackNavigationController *)userFeedbackViewControllerWithTitle:(NSString *)title 406 | hint:(NSString *)hint 407 | subjectPlaceholder:(NSString *)subjectPlaceholder 408 | messagePlaceholder:(NSString *)messagePlaceholder 409 | sendButtonTitle:(NSString *)sendButtonTitle 410 | cancelButtonTitle:(NSString *)cancelButtonTitle 411 | completion:(void (^ _Nullable )(BOOL feedbackSent, NSURL * _Nullable url))completionBlock; 412 | 413 | #endif 414 | 415 | /** 416 | Allows to create custom UI to gather user feedback and send to Bugfender. 417 | 418 | @param subject subject of the feedback 419 | @param message message of the feedback 420 | */ 421 | + (void)sendUserFeedbackWithSubject:(NSString *)subject message:(NSString *)message __deprecated_msg("Use sendUserFeedbackReturningUrlWithSubject:message: instead."); 422 | 423 | /** 424 | Allows to create custom UI to gather user feedback and send to Bugfender. 425 | 426 | @param subject subject of the feedback 427 | @param message message of the feedback 428 | @return URL linking to Bugfender 429 | */ 430 | + (nullable NSURL *)sendUserFeedbackReturningUrlWithSubject:(NSString *)subject message:(NSString *)message; 431 | 432 | /** 433 | * Logs all logs written via NSLog or OSLog. 434 | */ 435 | + (void)enableNSLogLogging API_AVAILABLE(macos(10.15), ios(15.0), tvos(15.0), watchos(8.0)); 436 | 437 | /** 438 | * Logs all logs written via NSLog or OSLog. 439 | * @param interceptor intercept the logs and allow to modify or to block them before they are sent to Bugfender 440 | */ 441 | + (void)enableNSLogLoggingWithInterceptor:(id )interceptor API_AVAILABLE(macos(10.15), ios(15.0), tvos(15.0), watchos(8.0)) NS_SWIFT_NAME(enableNSLogLogging(withInterceptor:)); 442 | 443 | @end 444 | 445 | NS_ASSUME_NONNULL_END 446 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/Info.plist -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/Modules/BugfenderSDK.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface: -------------------------------------------------------------------------------- 1 | // swift-interface-format-version: 1.0 2 | // swift-compiler-version: Apple Swift version 6.0.3 effective-5.10 (swiftlang-6.0.3.1.10 clang-1600.0.30.1) 3 | // swift-module-flags: -target arm64-apple-ios12.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-bare-slash-regex -module-name BugfenderSDK 4 | // swift-module-flags-ignorable: -no-verify-emitted-module-interface 5 | @_exported import BugfenderSDK 6 | import Foundation 7 | import Swift 8 | import _Concurrency 9 | import _StringProcessing 10 | import _SwiftConcurrencyShims 11 | extension BugfenderSDK.Bugfender { 12 | public class func print(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 13 | public class func error(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 14 | public class func warning(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 15 | } 16 | public func BFLog(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 17 | public func BFLogWarn(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 18 | public func BFLogErr(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 19 | public func BFLogTrace(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 20 | public func BFLogInfo(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 21 | public func BFLogFatal(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 22 | public func bfprint(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 23 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/Modules/BugfenderSDK.swiftmodule/arm64-apple-ios-simulator.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/Modules/BugfenderSDK.swiftmodule/arm64-apple-ios-simulator.swiftdoc -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/Modules/BugfenderSDK.swiftmodule/arm64-apple-ios-simulator.swiftinterface: -------------------------------------------------------------------------------- 1 | // swift-interface-format-version: 1.0 2 | // swift-compiler-version: Apple Swift version 6.0.3 effective-5.10 (swiftlang-6.0.3.1.10 clang-1600.0.30.1) 3 | // swift-module-flags: -target arm64-apple-ios12.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-bare-slash-regex -module-name BugfenderSDK 4 | // swift-module-flags-ignorable: -no-verify-emitted-module-interface 5 | @_exported import BugfenderSDK 6 | import Foundation 7 | import Swift 8 | import _Concurrency 9 | import _StringProcessing 10 | import _SwiftConcurrencyShims 11 | extension BugfenderSDK.Bugfender { 12 | public class func print(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 13 | public class func error(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 14 | public class func warning(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 15 | } 16 | public func BFLog(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 17 | public func BFLogWarn(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 18 | public func BFLogErr(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 19 | public func BFLogTrace(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 20 | public func BFLogInfo(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 21 | public func BFLogFatal(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 22 | public func bfprint(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 23 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/Modules/BugfenderSDK.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface: -------------------------------------------------------------------------------- 1 | // swift-interface-format-version: 1.0 2 | // swift-compiler-version: Apple Swift version 6.0.3 effective-5.10 (swiftlang-6.0.3.1.10 clang-1600.0.30.1) 3 | // swift-module-flags: -target x86_64-apple-ios12.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-bare-slash-regex -module-name BugfenderSDK 4 | // swift-module-flags-ignorable: -no-verify-emitted-module-interface 5 | @_exported import BugfenderSDK 6 | import Foundation 7 | import Swift 8 | import _Concurrency 9 | import _StringProcessing 10 | import _SwiftConcurrencyShims 11 | extension BugfenderSDK.Bugfender { 12 | public class func print(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 13 | public class func error(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 14 | public class func warning(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 15 | } 16 | public func BFLog(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 17 | public func BFLogWarn(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 18 | public func BFLogErr(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 19 | public func BFLogTrace(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 20 | public func BFLogInfo(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 21 | public func BFLogFatal(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 22 | public func bfprint(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 23 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/Modules/BugfenderSDK.swiftmodule/x86_64-apple-ios-simulator.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/Modules/BugfenderSDK.swiftmodule/x86_64-apple-ios-simulator.swiftdoc -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/Modules/BugfenderSDK.swiftmodule/x86_64-apple-ios-simulator.swiftinterface: -------------------------------------------------------------------------------- 1 | // swift-interface-format-version: 1.0 2 | // swift-compiler-version: Apple Swift version 6.0.3 effective-5.10 (swiftlang-6.0.3.1.10 clang-1600.0.30.1) 3 | // swift-module-flags: -target x86_64-apple-ios12.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -O -enable-bare-slash-regex -module-name BugfenderSDK 4 | // swift-module-flags-ignorable: -no-verify-emitted-module-interface 5 | @_exported import BugfenderSDK 6 | import Foundation 7 | import Swift 8 | import _Concurrency 9 | import _StringProcessing 10 | import _SwiftConcurrencyShims 11 | extension BugfenderSDK.Bugfender { 12 | public class func print(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 13 | public class func error(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 14 | public class func warning(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "\n", tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 15 | } 16 | public func BFLog(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 17 | public func BFLogWarn(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 18 | public func BFLogErr(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 19 | public func BFLogTrace(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 20 | public func BFLogInfo(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 21 | public func BFLogFatal(_ format: Swift.String, _ args: any Swift.CVarArg..., tag: Swift.String? = nil, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 22 | public func bfprint(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "", tag: Swift.String? = nil, level: BugfenderSDK.BFLogLevel = .default, filename: Swift.String = #file, line: Swift.Int = #line, funcname: Swift.String = #function) 23 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module BugfenderSDK { 2 | umbrella header "BugfenderSDK.h" 3 | export * 4 | 5 | module * { export * } 6 | } 7 | 8 | module BugfenderSDK.Swift { 9 | header "BugfenderSDK-Swift.h" 10 | requires objc 11 | } 12 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/PrivacyInfo.xcprivacy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSPrivacyTracking 6 | 7 | NSPrivacyCollectedDataTypes 8 | 9 | 10 | NSPrivacyCollectedDataType 11 | NSPrivacyCollectedDataTypeOtherDiagnosticData 12 | NSPrivacyCollectedDataTypeLinked 13 | 14 | NSPrivacyCollectedDataTypeTracking 15 | 16 | NSPrivacyCollectedDataTypePurposes 17 | 18 | NSPrivacyCollectedDataTypePurposeOther 19 | 20 | 21 | 22 | NSPrivacyAccessedAPITypes 23 | 24 | 25 | NSPrivacyAccessedAPIType 26 | NSPrivacyAccessedAPICategoryUserDefaults 27 | NSPrivacyAccessedAPITypeReasons 28 | 29 | CA92.1 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /BugfenderSDK.xcframework/ios-arm64_x86_64-simulator/BugfenderSDK.framework/_CodeSignature/CodeResources: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | files 6 | 7 | Headers/BFDefaultLogInterceptor.h 8 | 9 | HM3OfaV/2/FAmMiZhowi7Z+XD3k= 10 | 11 | Headers/BFInterceptedLog.h 12 | 13 | InKoTT1wl9WenJUaI/UucvEsjfE= 14 | 15 | Headers/BFLogInterceptor.h 16 | 17 | HEA76HZiRCGnFUYr6egoRlxIx/I= 18 | 19 | Headers/BFUserFeedbackNavigationController.h 20 | 21 | pgNFegt5zvOiPUxMA25ZNeKFPoM= 22 | 23 | Headers/BFUserFeedbackViewController.h 24 | 25 | 2nyi/Du3qqDKGIjd2XYC7Mvm6BU= 26 | 27 | Headers/BugfenderSDK-Swift.h 28 | 29 | KbwJWq454IA33njR8ZKb6NexDC8= 30 | 31 | Headers/BugfenderSDK.h 32 | 33 | l8Bc9RCS6cazY7eHvdop4Ra16n4= 34 | 35 | Info.plist 36 | 37 | UUEXOi22Zsg+oC7auIqhrCC+u+E= 38 | 39 | Modules/BugfenderSDK.swiftmodule/arm64-apple-ios-simulator.abi.json 40 | 41 | qipEtgmYcoA5cpkJiumhC7oOpaw= 42 | 43 | Modules/BugfenderSDK.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface 44 | 45 | +7ktzI9zY7XOzlkJhM/qGu/7xe0= 46 | 47 | Modules/BugfenderSDK.swiftmodule/arm64-apple-ios-simulator.swiftdoc 48 | 49 | Jl6dHtJa2ShcyFnUU+tkYURZXZ8= 50 | 51 | Modules/BugfenderSDK.swiftmodule/arm64-apple-ios-simulator.swiftinterface 52 | 53 | +7ktzI9zY7XOzlkJhM/qGu/7xe0= 54 | 55 | Modules/BugfenderSDK.swiftmodule/arm64-apple-ios-simulator.swiftmodule 56 | 57 | tdQ7Kd9iAIy7BPD+IbrwDMvxyT8= 58 | 59 | Modules/BugfenderSDK.swiftmodule/x86_64-apple-ios-simulator.abi.json 60 | 61 | qipEtgmYcoA5cpkJiumhC7oOpaw= 62 | 63 | Modules/BugfenderSDK.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface 64 | 65 | +NnEFpK6LA9C+cXKq1jll6upaTg= 66 | 67 | Modules/BugfenderSDK.swiftmodule/x86_64-apple-ios-simulator.swiftdoc 68 | 69 | N5ZWJZ1aR+JQWaqYT1Oslhnwsjo= 70 | 71 | Modules/BugfenderSDK.swiftmodule/x86_64-apple-ios-simulator.swiftinterface 72 | 73 | +NnEFpK6LA9C+cXKq1jll6upaTg= 74 | 75 | Modules/BugfenderSDK.swiftmodule/x86_64-apple-ios-simulator.swiftmodule 76 | 77 | on5d+FcotaovhA6pJkbObMIK8B0= 78 | 79 | Modules/module.modulemap 80 | 81 | x/cXF6lKRNspReEtzJCSW0fNGB4= 82 | 83 | PrivacyInfo.xcprivacy 84 | 85 | hvWgeSSd3CM7mvMNrAyctw4z0FY= 86 | 87 | 88 | files2 89 | 90 | Headers/BFDefaultLogInterceptor.h 91 | 92 | hash2 93 | 94 | RPzjmSJ0KeLiYXq9hGrpzX/YhmMaxX5QUPFjOrC9+rs= 95 | 96 | 97 | Headers/BFInterceptedLog.h 98 | 99 | hash2 100 | 101 | UcwfFY0qkHqthVY2AufNK+Eps9AsOCdPr/1xz3EXsBg= 102 | 103 | 104 | Headers/BFLogInterceptor.h 105 | 106 | hash2 107 | 108 | N4IIYmip6wsKAxkKJ7CKK95v6mHIkVoyURQH938ca5c= 109 | 110 | 111 | Headers/BFUserFeedbackNavigationController.h 112 | 113 | hash2 114 | 115 | l8gcWZ/QAHe/vDz+pEzNEUS0JBQ3UAKqilS9QX0XGxE= 116 | 117 | 118 | Headers/BFUserFeedbackViewController.h 119 | 120 | hash2 121 | 122 | erKOMKGGxHhi9xZCBIYJTISwyaA0bXoGP3dOUh15uaE= 123 | 124 | 125 | Headers/BugfenderSDK-Swift.h 126 | 127 | hash2 128 | 129 | C1qSdDlitmoGouvKG1XXNowvxZ2YCAuzhNWtWD1zH7U= 130 | 131 | 132 | Headers/BugfenderSDK.h 133 | 134 | hash2 135 | 136 | +DFjUYuW5metNfpNBjZgjyxOHSjch2xdR6aMUVzsYjM= 137 | 138 | 139 | Modules/BugfenderSDK.swiftmodule/arm64-apple-ios-simulator.abi.json 140 | 141 | hash2 142 | 143 | dtwrepbJ77ILrKfX2hgcPiMQJ1N4sgEPuCgUYQn4Vm4= 144 | 145 | 146 | Modules/BugfenderSDK.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface 147 | 148 | hash2 149 | 150 | Mm03XMe0zTyDJjlbHyiJ9gedTmy63yKxUSDY2e2EtBM= 151 | 152 | 153 | Modules/BugfenderSDK.swiftmodule/arm64-apple-ios-simulator.swiftdoc 154 | 155 | hash2 156 | 157 | gJeTsw3qSYP8IFfCCuAS/WVSjmoMVvorp2y194mkf9M= 158 | 159 | 160 | Modules/BugfenderSDK.swiftmodule/arm64-apple-ios-simulator.swiftinterface 161 | 162 | hash2 163 | 164 | Mm03XMe0zTyDJjlbHyiJ9gedTmy63yKxUSDY2e2EtBM= 165 | 166 | 167 | Modules/BugfenderSDK.swiftmodule/arm64-apple-ios-simulator.swiftmodule 168 | 169 | hash2 170 | 171 | XaHp/T7MrYwvtDcTOV31zDGUsPtVUoiHeJ/OC3vNibE= 172 | 173 | 174 | Modules/BugfenderSDK.swiftmodule/x86_64-apple-ios-simulator.abi.json 175 | 176 | hash2 177 | 178 | dtwrepbJ77ILrKfX2hgcPiMQJ1N4sgEPuCgUYQn4Vm4= 179 | 180 | 181 | Modules/BugfenderSDK.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface 182 | 183 | hash2 184 | 185 | BUdCR0jGgq0czY/im65Vb2d6efv9wsWc3tzo/Bvtdqk= 186 | 187 | 188 | Modules/BugfenderSDK.swiftmodule/x86_64-apple-ios-simulator.swiftdoc 189 | 190 | hash2 191 | 192 | yHv6STZPDGipCG34LjpmsVR2W8U0+S8dL+mxsWiyY0k= 193 | 194 | 195 | Modules/BugfenderSDK.swiftmodule/x86_64-apple-ios-simulator.swiftinterface 196 | 197 | hash2 198 | 199 | BUdCR0jGgq0czY/im65Vb2d6efv9wsWc3tzo/Bvtdqk= 200 | 201 | 202 | Modules/BugfenderSDK.swiftmodule/x86_64-apple-ios-simulator.swiftmodule 203 | 204 | hash2 205 | 206 | EYx3VLgSEQ05iyWZ0056GSMKM35EJrsQglgkl6txo8o= 207 | 208 | 209 | Modules/module.modulemap 210 | 211 | hash2 212 | 213 | wzagRleOdzlpLhvfj4TWCu3QhjNS5G9PKK5mP8nzzLc= 214 | 215 | 216 | PrivacyInfo.xcprivacy 217 | 218 | hash2 219 | 220 | 8Bw1x3CoeC5gLRbhV0CWwxI3HmL64X/ikUs5sXB+e54= 221 | 222 | 223 | 224 | rules 225 | 226 | ^.* 227 | 228 | ^.*\.lproj/ 229 | 230 | optional 231 | 232 | weight 233 | 1000 234 | 235 | ^.*\.lproj/locversion.plist$ 236 | 237 | omit 238 | 239 | weight 240 | 1100 241 | 242 | ^Base\.lproj/ 243 | 244 | weight 245 | 1010 246 | 247 | ^version.plist$ 248 | 249 | 250 | rules2 251 | 252 | .*\.dSYM($|/) 253 | 254 | weight 255 | 11 256 | 257 | ^(.*/)?\.DS_Store$ 258 | 259 | omit 260 | 261 | weight 262 | 2000 263 | 264 | ^.* 265 | 266 | ^.*\.lproj/ 267 | 268 | optional 269 | 270 | weight 271 | 1000 272 | 273 | ^.*\.lproj/locversion.plist$ 274 | 275 | omit 276 | 277 | weight 278 | 1100 279 | 280 | ^Base\.lproj/ 281 | 282 | weight 283 | 1010 284 | 285 | ^Info\.plist$ 286 | 287 | omit 288 | 289 | weight 290 | 20 291 | 292 | ^PkgInfo$ 293 | 294 | omit 295 | 296 | weight 297 | 20 298 | 299 | ^embedded\.provisionprofile$ 300 | 301 | weight 302 | 20 303 | 304 | ^version\.plist$ 305 | 306 | weight 307 | 20 308 | 309 | 310 | 311 | 312 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # 2.0.1 2 | - Breaking update: built with Xcode 16, which means you will need Xcode 16 or newer to build your application. 3 | 4 | # 2.0.0 5 | - New: the xcframework is now digitally signed. 6 | - Breaking update: removed Bitcode, since now Apple rejects builds with Bitcode. 7 | - Breaking update: built with Xcode 15, which means you will need Xcode 15 or newer to build your application. 8 | - Breaking update: supports iOS version 12.0 and newer (iOS deployment target) 9 | - Breaking update: drop static library and dynamic framework builds. 10 | - Note there’s no functionality change vs prior version (1.13.2) 11 | 12 | # 1.13.2 13 | - Update: remove KSCrash logs to console output (there are benign error messages) 14 | - Bugfix: replace ID generation function that lead to sporadically missing logs when processing a high volume in a short time 15 | 16 | # 1.13.1 17 | - Bugfix: bfsdk_ksfu_readEntireFile reimplementation regression introduced in 1.13.0 18 | 19 | # 1.13.0 20 | - Update: add PrivacyInfo.xcprivacy to automatically recognize "other diagnostic data" is being collected, with no tracking and no association with the user identity 21 | - Update: declare accepted usage of NSUserDefaults in PrivacyInfo.xcprivacy 22 | - Update: replace some API calls that would "require a reason" -- whilst the reason is not tracking, Apple has not yet listed a suitable accepted reason item. we have removed them to prevent warnings or other issues because of BugfenderSDK usage 23 | 24 | # 1.12.2 25 | - Bugfix: race condition when setting device key-values that may lead to a crash 26 | 27 | # 1.12.1 28 | - This release fixes problems with Cocoapods and static library in the previous release. 29 | 30 | # 1.12.0 31 | - Feature: Add `enableNSLogLogging` & `enableNSLogLoggingWithInterceptor` method that allows to automatically capture logs written via NSLog or OSLog. 32 | - Internal: Changes on library initialization. 33 | 34 | # 1.11.0 35 | - Feature: Add `enableUIEventLoggingWithIgnoredViewTags` method that allows to avoid generating logs for some views 36 | - Changed `setMaximumLocalStorageSize` to not throw an Exception if the value provided is out of range. 37 | 38 | # 1.10.6 39 | - Fix: Possible crash due to corrupted crash log 40 | - Feature: iOS device name is not gathered anymore, it has been replaced by the device model. 41 | 42 | # 1.10.5 43 | - Fix: upload symbols script was not working properly 44 | 45 | # 1.10.4 46 | - Add upload symbols script to Bugfender Pod 47 | 48 | # 1.10.3 49 | - Bugfix: user feedback dialog navigation bar sometimes not styling properly 50 | - Bugfix: crashes sometimes reported in the wrong session when the application crashes multiple times in a row 51 | 52 | # 1.10.2 53 | - Bugfix: fixed potential crash when setting custom device data 54 | 55 | # 1.10.1 56 | - Bugfix: fixed potential crash or missing logs when app is in background mode in combination with protected data classes 57 | - More efficient API calls 58 | 59 | # 1.10.0 60 | - Bugfender was compiled with Xcode 12 and is SPM compatible now 61 | - Additionally dynamic framework and static libraries without simulator arm slice are provided for retrocompatiblity but they should be avoided 62 | 63 | # 1.9.2 64 | - Feature: added a new overrideDeviceName(String) that allows to customize the name of the device. 65 | 66 | # 1.9.1 67 | - Fix: returning URLs from device/issue/session missing path segment 68 | 69 | # 1.9.0 70 | - Support for CocoaPods 1.9.0 and xcframework 71 | 72 | # 1.8.0 73 | - Added xcframework to support Project Catalyst 74 | - Bugfender is now a dynamic library and swift files are included inside. No need to manually add the swift bridge anymore 75 | - Bugfender will return a specific -1004 error when trying to send logs to an app that was deleted in the server 76 | 77 | # 1.7.0 78 | - Fixed an issue in which retrieving the session identifier right after activateLogger might result in a null identifier under certain conditions and this could provocate a crash in swift projects 79 | - Changed pulic api so URL dependant identifiers are nullable properties now 80 | 81 | # 1.6.6 82 | - Added new log levels 83 | 84 | # 1.6.5 85 | - The device identifier, the session identifier and sending an issue (issue, crash or user feedback) will return now URLs to the Bugfender's Dashboard. This can be used to create automations and to integrate BugfenderSDK with third party tools 86 | - Fixed race condition that may prevent some crashes to be correctly displayed in the Bugfender's Dashboard 87 | - Added new method allowing developers to manually send crash reports to Bugfender 88 | 89 | # 1.6.4 90 | - Fixed an async task that may block a background thread  91 | - Improved how user defined key-values synchronize with the server  92 | - Fixed race condition that may lead to a heap corruption in low connectivity conditions 93 | 94 | # 1.6.3 95 | - Fixed threading issue that may lead to a crash under stress conditions 96 | 97 | # 1.6.2 98 | - Improved the memory footprint of BugfenderSDK. The SDK, in general, will need less memory to perform normal operations 99 | - Improved the behaviour of the SDK heartbeat for apps which are never fully closed 100 | - Fixed crash when a device was trying to send an abnormally big amount of logs to the server 101 | - Logs have been limited to 32000 characters in order to avoid memory issues in devices with low resources available 102 | - Updated docs regarding to the ussage of the tags 103 | - Other minor performance issues 104 | 105 | # 1.6.1 106 | - Fixed crash when using the Bugfender User Feedback in Swift 107 | - Improved return key type in the User Feedback textfields 108 | 109 | # 1.6.0 110 | - Featuring the new Bugfender User Feedback. A fast and easy way to gather feedback from the users 111 | - Fixed swift bridges sending the full path of the files instead the filename 112 | 113 | # 1.5.6 114 | - Fixed an issue in which gap logs were reporting wrong begin/end dates 115 | 116 | # 1.5.5 117 | - Addressing an issue in which access to the iOS keychain in the background may cause a crash 118 | - Fixed SDK sending wrong timestamp in crash 119 | 120 | # 1.5.4 121 | - Fixed when receiving a big number of logs per seconds the SDK may use a lot of RAM and the app may crash. New implementation will ignore new Log operations if it receives a memory warning until the Log queue is reduced. 122 | 123 | # 1.5.3 124 | - Fixed issue with some crashes was not sent. 125 | 126 | # 1.5.2 127 | - Implement refresh device status 128 | - Fixed issue with the device key-values 129 | 130 | # 1.5.1 131 | - Improved efficiency of background cleanup process 132 | 133 | # 1.5.0 134 | - Added crash reporting 135 | - Added information when deleting logs unsent to the server 136 | - Added exponential back off if the server is not reachable 137 | 138 | # 1.4.10 139 | - Added method for setting API endpoint 140 | 141 | # 1.4.9 142 | - Fixed crash when sendIssues is called with nil parameters. 143 | - Adding some other parameter validations. 144 | 145 | # 1.4.8 146 | - Fixed minor issues. 147 | 148 | # 1.4.7 149 | - Fixed minor issues. 150 | 151 | # 1.4.6 152 | - Added method to get the session identifier. 153 | - Now send issue method returns the issue identifier. 154 | 155 | # 1.4.5 156 | - Fixed issue with the latest release. 157 | 158 | # 1.4.4 159 | - Improvements with the CPU consumption. 160 | 161 | # 1.4.3 162 | - Stability update: fixed crash in very rare circumstances. 163 | - Improvements when the sdk is deleting the old logs because the max storage size is reached. 164 | 165 | # 1.4.2 166 | - Fixing CocoaPods when using static libraries in Objective-C 167 | - Now compatible with Swift 2.3, 3.0 and 3.1 168 | - Fixing appledoc, fixToConsole default setting wrongly documented 169 | - Fixing appledoc, some argument names were wrong 170 | - Printing an empty line on BFLog(nil); 171 | 172 | # 1.4.0 173 | - Declared the framework as a Clang module, so that the framework can be used in Swift without bridging headers 174 | - Removed redundant and outdated method calls to make the SDK docs/API cleaner 175 | - Published helper file for Swift projects 176 | 177 | # 0.3.27 178 | - Stability update: fixed crash in very rare circumstances. 179 | 180 | # 0.3.26 181 | - Improved networking code, smaller and more efficient 182 | - Fixed conflict with AFNetworking library 183 | 184 | # 0.3.25 185 | - enableNSLogLogging is now marked as deprecated, not working since iOS 10 186 | - Dropping support for iOS 7 187 | - Improvements on the networking code 188 | 189 | # 0.3.24 190 | - Better formatting of the automated user interaction logging 191 | 192 | # 0.3.23 193 | - Fixing missing some NSLogs at the beginning and end of the session, especially on iOS 10 194 | - Fixing documentation warnings raised by Xcode 8 195 | - Fixing duplicated logs from NSLog when DEBUG macro is defined when using BFLog 196 | 197 | # 0.3.22 198 | - Fixing bug that sends empty sessions to the server 199 | - Fixing a bug that reports wrong app version information when the build number contains the dot character 200 | 201 | # 0.3.21 202 | - Fixing wake lock to avoid applications dying faster in the background 203 | 204 | # 0.3.20 205 | - Bug fix: date formatting in devices in Arabic 206 | - Improves: format for UI events 207 | 208 | # 0.3.18 209 | - fixing nil dereference exceptions (rarely seen) 210 | 211 | # 0.3.17 212 | - Fixes synchronization of device details set with setDevice* 213 | - Allows the change of the API endpoint via environment variable for Bugfender preproduction tests 214 | 215 | # 0.3.16 216 | - Fixes #11, crash when using Bugfender with CocoaLumberjack and empty log message 217 | 218 | # 0.3.15 219 | - Fixes timestamp estimation and some UIEvents without timestamp. 220 | - Better description for topmost view controller and UIEvents 221 | 222 | # 0.3.14 223 | - Recompiled with Xcode 7, supports Bitcode 224 | 225 | # 0.3.10 226 | - Fixed crash on iOS7 when NSLog logging is enabled 227 | - Added documentation about issues 228 | 229 | # 0.3.9 230 | - Added issues 231 | - Option to send logs from the app 232 | 233 | # 0.3.8 234 | - Added device detail key-value storage 235 | - Fixed a crash when device disk was full 236 | 237 | # 0.3.7 238 | - Efficiency and stability improvements 239 | 240 | # 0.3.6 241 | - Automated logging of NSLog 242 | - Automated UIEvent logging 243 | - Efficiency and stability improvements 244 | -------------------------------------------------------------------------------- /Example/BugfenderExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/BugfenderExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/BugfenderExample.xcodeproj/xcshareddata/xcschemes/BugfenderExample.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 67 | 68 | 78 | 80 | 86 | 87 | 88 | 89 | 90 | 91 | 97 | 99 | 105 | 106 | 107 | 108 | 110 | 111 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /Example/BugfenderExample.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/BugfenderExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/BugfenderExample/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // BugfenderExample 4 | // 5 | // Created by gimix on 14/08/15. 6 | // Copyright (c) 2015 Bugfender. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /Example/BugfenderExample/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // BugfenderExample 4 | // 5 | // Created by gimix on 14/08/15. 6 | // Copyright (c) 2015 Bugfender. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import 11 | 12 | @interface AppDelegate () 13 | 14 | @end 15 | 16 | @implementation AppDelegate 17 | 18 | 19 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 20 | // Configure Bugfender with all options enabled 21 | [Bugfender overrideDeviceName:@"This is the device name"]; 22 | [Bugfender activateLogger:@"s5VCpT6z9HaSEe0T8re6nsIk7tXsk23b"]; // Use your own token here in order to see results in your account 23 | [Bugfender enableUIEventLogging]; 24 | BFLog(@"Hello world! 🎉"); 25 | return YES; 26 | } 27 | 28 | - (void)applicationWillResignActive:(UIApplication *)application { 29 | 30 | } 31 | 32 | - (void)applicationDidEnterBackground:(UIApplication *)application { 33 | 34 | } 35 | 36 | - (void)applicationWillEnterForeground:(UIApplication *)application { 37 | 38 | } 39 | 40 | - (void)applicationDidBecomeActive:(UIApplication *)application { 41 | 42 | } 43 | 44 | - (void)applicationWillTerminate:(UIApplication *)application { 45 | 46 | } 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /Example/BugfenderExample/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 25 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /Example/BugfenderExample/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 31 | 37 | 38 | 39 | 40 | 46 | 52 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 102 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | -------------------------------------------------------------------------------- /Example/BugfenderExample/FirstViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FirstViewController.h 3 | // BugfenderExample 4 | // 5 | // Created by gimix on 14/08/15. 6 | // Copyright (c) 2015 Bugfender. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FirstViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /Example/BugfenderExample/FirstViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // FirstViewController.m 3 | // BugfenderExample 4 | // 5 | // Created by gimix on 14/08/15. 6 | // Copyright (c) 2015 Bugfender. All rights reserved. 7 | // 8 | 9 | #import "FirstViewController.h" 10 | 11 | @interface FirstViewController () 12 | 13 | @end 14 | 15 | @implementation FirstViewController 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/BugfenderExample/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /Example/BugfenderExample/Images.xcassets/first.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "first.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Example/BugfenderExample/Images.xcassets/first.imageset/first.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/Example/BugfenderExample/Images.xcassets/first.imageset/first.pdf -------------------------------------------------------------------------------- /Example/BugfenderExample/Images.xcassets/second.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "second.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Example/BugfenderExample/Images.xcassets/second.imageset/second.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/Example/BugfenderExample/Images.xcassets/second.imageset/second.pdf -------------------------------------------------------------------------------- /Example/BugfenderExample/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UIStatusBarTintParameters 34 | 35 | UINavigationBar 36 | 37 | Style 38 | UIBarStyleDefault 39 | Translucent 40 | 41 | 42 | 43 | UISupportedInterfaceOrientations 44 | 45 | UIInterfaceOrientationPortrait 46 | UIInterfaceOrientationLandscapeLeft 47 | UIInterfaceOrientationLandscapeRight 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /Example/BugfenderExample/SecondViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SecondViewController.h 3 | // BugfenderExample 4 | // 5 | // Created by gimix on 14/08/15. 6 | // Copyright (c) 2015 Bugfender. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface SecondViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /Example/BugfenderExample/SecondViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SecondViewController.m 3 | // BugfenderExample 4 | // 5 | // Created by gimix on 14/08/15. 6 | // Copyright (c) 2015 Bugfender. All rights reserved. 7 | // 8 | 9 | #import "SecondViewController.h" 10 | 11 | @interface SecondViewController () 12 | 13 | @end 14 | 15 | @implementation SecondViewController 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Example/BugfenderExample/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // BugfenderExample 4 | // 5 | // Created by gimix on 14/08/15. 6 | // Copyright (c) 2015 Bugfender. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Example/BugfenderExampleUITests/BugfenderExampleUITests.m: -------------------------------------------------------------------------------- 1 | // 2 | // BugfenderExampleUITests.m 3 | // BugfenderExampleUITests 4 | // 5 | // Created by gimix on 06/10/2016. 6 | // Copyright © 2016 Bugfender. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BugfenderExampleUITests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation BugfenderExampleUITests 16 | 17 | - (void)setUp { 18 | [super setUp]; 19 | 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | 22 | // In UI tests it is usually best to stop immediately when a failure occurs. 23 | self.continueAfterFailure = NO; 24 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 25 | [[[XCUIApplication alloc] init] launch]; 26 | 27 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 28 | } 29 | 30 | - (void)tearDown { 31 | // Put teardown code here. This method is called after the invocation of each test method in the class. 32 | [super tearDown]; 33 | } 34 | 35 | // this very simple test check no crashes happen when sending some log to Bugfender 36 | - (void)testButton { 37 | XCUIApplication *app = [[XCUIApplication alloc] init]; 38 | [app.buttons[@"Example button"] tap]; 39 | } 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /Example/BugfenderExampleUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '11.0' 2 | target "BugfenderExample" do 3 | # For local testing 4 | #pod 'BugfenderSDK', :path => '..' 5 | pod 'BugfenderSDK', '~> 2.0.1' 6 | end 7 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - BugfenderSDK (2.0.0) 3 | 4 | DEPENDENCIES: 5 | - BugfenderSDK (from `..`) 6 | 7 | EXTERNAL SOURCES: 8 | BugfenderSDK: 9 | :path: ".." 10 | 11 | SPEC CHECKSUMS: 12 | BugfenderSDK: 290a6c6163c2212c819e63c49d192c8625046602 13 | 14 | PODFILE CHECKSUM: 2e1725143d6abb5ae5dff55c68f7eb5d54445740 15 | 16 | COCOAPODS: 1.16.2 17 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gem 'jazzy' 3 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | CFPropertyList (3.0.6) 5 | rexml 6 | activesupport (7.0.8) 7 | concurrent-ruby (~> 1.0, >= 1.0.2) 8 | i18n (>= 1.6, < 2) 9 | minitest (>= 5.1) 10 | tzinfo (~> 2.0) 11 | addressable (2.8.5) 12 | public_suffix (>= 2.0.2, < 6.0) 13 | algoliasearch (1.27.5) 14 | httpclient (~> 2.8, >= 2.8.3) 15 | json (>= 1.5.1) 16 | atomos (0.1.3) 17 | claide (1.1.0) 18 | cocoapods (1.12.1) 19 | addressable (~> 2.8) 20 | claide (>= 1.0.2, < 2.0) 21 | cocoapods-core (= 1.12.1) 22 | cocoapods-deintegrate (>= 1.0.3, < 2.0) 23 | cocoapods-downloader (>= 1.6.0, < 2.0) 24 | cocoapods-plugins (>= 1.0.0, < 2.0) 25 | cocoapods-search (>= 1.0.0, < 2.0) 26 | cocoapods-trunk (>= 1.6.0, < 2.0) 27 | cocoapods-try (>= 1.1.0, < 2.0) 28 | colored2 (~> 3.1) 29 | escape (~> 0.0.4) 30 | fourflusher (>= 2.3.0, < 3.0) 31 | gh_inspector (~> 1.0) 32 | molinillo (~> 0.8.0) 33 | nap (~> 1.0) 34 | ruby-macho (>= 2.3.0, < 3.0) 35 | xcodeproj (>= 1.21.0, < 2.0) 36 | cocoapods-core (1.12.1) 37 | activesupport (>= 5.0, < 8) 38 | addressable (~> 2.8) 39 | algoliasearch (~> 1.0) 40 | concurrent-ruby (~> 1.1) 41 | fuzzy_match (~> 2.0.4) 42 | nap (~> 1.0) 43 | netrc (~> 0.11) 44 | public_suffix (~> 4.0) 45 | typhoeus (~> 1.0) 46 | cocoapods-deintegrate (1.0.5) 47 | cocoapods-downloader (1.6.3) 48 | cocoapods-plugins (1.0.0) 49 | nap 50 | cocoapods-search (1.0.1) 51 | cocoapods-trunk (1.6.0) 52 | nap (>= 0.8, < 2.0) 53 | netrc (~> 0.11) 54 | cocoapods-try (1.2.0) 55 | colored2 (3.1.2) 56 | concurrent-ruby (1.2.2) 57 | escape (0.0.4) 58 | ethon (0.16.0) 59 | ffi (>= 1.15.0) 60 | ffi (1.15.5) 61 | fourflusher (2.3.1) 62 | fuzzy_match (2.0.4) 63 | gh_inspector (1.1.3) 64 | httpclient (2.8.3) 65 | i18n (1.14.1) 66 | concurrent-ruby (~> 1.0) 67 | jazzy (0.14.4) 68 | cocoapods (~> 1.5) 69 | mustache (~> 1.1) 70 | open4 (~> 1.3) 71 | redcarpet (~> 3.4) 72 | rexml (~> 3.2) 73 | rouge (>= 2.0.6, < 5.0) 74 | sassc (~> 2.1) 75 | sqlite3 (~> 1.3) 76 | xcinvoke (~> 0.3.0) 77 | json (2.6.3) 78 | liferaft (0.0.6) 79 | minitest (5.20.0) 80 | molinillo (0.8.0) 81 | mustache (1.1.1) 82 | nanaimo (0.3.0) 83 | nap (1.1.0) 84 | netrc (0.11.0) 85 | open4 (1.3.4) 86 | public_suffix (4.0.7) 87 | redcarpet (3.6.0) 88 | rexml (3.2.6) 89 | rouge (4.1.3) 90 | ruby-macho (2.5.1) 91 | sassc (2.4.0) 92 | ffi (~> 1.9) 93 | sqlite3 (1.6.6-x86_64-darwin) 94 | typhoeus (1.4.0) 95 | ethon (>= 0.9.0) 96 | tzinfo (2.0.6) 97 | concurrent-ruby (~> 1.0) 98 | xcinvoke (0.3.0) 99 | liferaft (~> 0.0.6) 100 | xcodeproj (1.22.0) 101 | CFPropertyList (>= 2.3.3, < 4.0) 102 | atomos (~> 0.1.3) 103 | claide (>= 1.0.2, < 2.0) 104 | colored2 (~> 3.1) 105 | nanaimo (~> 0.3.0) 106 | rexml (~> 3.2.4) 107 | 108 | PLATFORMS 109 | x86_64-darwin-22 110 | 111 | DEPENDENCIES 112 | jazzy 113 | 114 | BUNDLED WITH 115 | 2.4.10 116 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright since 2015 Bugfender 2 | 3 | See https://bugfender.com/terms-of-service/ 4 | 5 | --- 6 | 7 | License for http://llvm.org: 8 | 9 | ============================================================================== 10 | LLVM Release License 11 | ============================================================================== 12 | University of Illinois/NCSA 13 | Open Source License 14 | 15 | Copyright (c) 2003-2015 University of Illinois at Urbana-Champaign. 16 | All rights reserved. 17 | 18 | Developed by: 19 | 20 | LLVM Team 21 | 22 | University of Illinois at Urbana-Champaign 23 | 24 | http://llvm.org 25 | 26 | Permission is hereby granted, free of charge, to any person obtaining a copy of 27 | this software and associated documentation files (the "Software"), to deal with 28 | the Software without restriction, including without limitation the rights to 29 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 30 | of the Software, and to permit persons to whom the Software is furnished to do 31 | so, subject to the following conditions: 32 | 33 | * Redistributions of source code must retain the above copyright notice, 34 | this list of conditions and the following disclaimers. 35 | 36 | * Redistributions in binary form must reproduce the above copyright notice, 37 | this list of conditions and the following disclaimers in the 38 | documentation and/or other materials provided with the distribution. 39 | 40 | * Neither the names of the LLVM Team, University of Illinois at 41 | Urbana-Champaign, nor the names of its contributors may be used to 42 | endorse or promote products derived from this Software without specific 43 | prior written permission. 44 | 45 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 46 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 47 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 48 | CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 49 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 50 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE 51 | SOFTWARE. 52 | 53 | ============================================================================== 54 | Copyrights and Licenses for Third Party Software Distributed with LLVM: 55 | ============================================================================== 56 | The LLVM software contains code written by third parties. Such software will 57 | have its own individual LICENSE.TXT file in the directory in which it appears. 58 | This file will describe the copyrights, license, and restrictions which apply 59 | to that code. 60 | 61 | The disclaimer of warranty in the University of Illinois Open Source License 62 | applies to all code in the LLVM Distribution, and nothing in any of the 63 | other licenses gives permission to use the names of the LLVM Team or the 64 | University of Illinois to endorse or promote products derived from this 65 | Software. 66 | 67 | --- 68 | 69 | License for https://www.swift.org: 70 | 71 | Apache License 72 | Version 2.0, January 2004 73 | http://www.apache.org/licenses/ 74 | 75 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 76 | 77 | 1. Definitions. 78 | 79 | "License" shall mean the terms and conditions for use, reproduction, 80 | and distribution as defined by Sections 1 through 9 of this document. 81 | 82 | "Licensor" shall mean the copyright owner or entity authorized by 83 | the copyright owner that is granting the License. 84 | 85 | "Legal Entity" shall mean the union of the acting entity and all 86 | other entities that control, are controlled by, or are under common 87 | control with that entity. For the purposes of this definition, 88 | "control" means (i) the power, direct or indirect, to cause the 89 | direction or management of such entity, whether by contract or 90 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 91 | outstanding shares, or (iii) beneficial ownership of such entity. 92 | 93 | "You" (or "Your") shall mean an individual or Legal Entity 94 | exercising permissions granted by this License. 95 | 96 | "Source" form shall mean the preferred form for making modifications, 97 | including but not limited to software source code, documentation 98 | source, and configuration files. 99 | 100 | "Object" form shall mean any form resulting from mechanical 101 | transformation or translation of a Source form, including but 102 | not limited to compiled object code, generated documentation, 103 | and conversions to other media types. 104 | 105 | "Work" shall mean the work of authorship, whether in Source or 106 | Object form, made available under the License, as indicated by a 107 | copyright notice that is included in or attached to the work 108 | (an example is provided in the Appendix below). 109 | 110 | "Derivative Works" shall mean any work, whether in Source or Object 111 | form, that is based on (or derived from) the Work and for which the 112 | editorial revisions, annotations, elaborations, or other modifications 113 | represent, as a whole, an original work of authorship. For the purposes 114 | of this License, Derivative Works shall not include works that remain 115 | separable from, or merely link (or bind by name) to the interfaces of, 116 | the Work and Derivative Works thereof. 117 | 118 | "Contribution" shall mean any work of authorship, including 119 | the original version of the Work and any modifications or additions 120 | to that Work or Derivative Works thereof, that is intentionally 121 | submitted to Licensor for inclusion in the Work by the copyright owner 122 | or by an individual or Legal Entity authorized to submit on behalf of 123 | the copyright owner. For the purposes of this definition, "submitted" 124 | means any form of electronic, verbal, or written communication sent 125 | to the Licensor or its representatives, including but not limited to 126 | communication on electronic mailing lists, source code control systems, 127 | and issue tracking systems that are managed by, or on behalf of, the 128 | Licensor for the purpose of discussing and improving the Work, but 129 | excluding communication that is conspicuously marked or otherwise 130 | designated in writing by the copyright owner as "Not a Contribution." 131 | 132 | "Contributor" shall mean Licensor and any individual or Legal Entity 133 | on behalf of whom a Contribution has been received by Licensor and 134 | subsequently incorporated within the Work. 135 | 136 | 2. Grant of Copyright License. Subject to the terms and conditions of 137 | this License, each Contributor hereby grants to You a perpetual, 138 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 139 | copyright license to reproduce, prepare Derivative Works of, 140 | publicly display, publicly perform, sublicense, and distribute the 141 | Work and such Derivative Works in Source or Object form. 142 | 143 | 3. Grant of Patent License. Subject to the terms and conditions of 144 | this License, each Contributor hereby grants to You a perpetual, 145 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 146 | (except as stated in this section) patent license to make, have made, 147 | use, offer to sell, sell, import, and otherwise transfer the Work, 148 | where such license applies only to those patent claims licensable 149 | by such Contributor that are necessarily infringed by their 150 | Contribution(s) alone or by combination of their Contribution(s) 151 | with the Work to which such Contribution(s) was submitted. If You 152 | institute patent litigation against any entity (including a 153 | cross-claim or counterclaim in a lawsuit) alleging that the Work 154 | or a Contribution incorporated within the Work constitutes direct 155 | or contributory patent infringement, then any patent licenses 156 | granted to You under this License for that Work shall terminate 157 | as of the date such litigation is filed. 158 | 159 | 4. Redistribution. You may reproduce and distribute copies of the 160 | Work or Derivative Works thereof in any medium, with or without 161 | modifications, and in Source or Object form, provided that You 162 | meet the following conditions: 163 | 164 | (a) You must give any other recipients of the Work or 165 | Derivative Works a copy of this License; and 166 | 167 | (b) You must cause any modified files to carry prominent notices 168 | stating that You changed the files; and 169 | 170 | (c) You must retain, in the Source form of any Derivative Works 171 | that You distribute, all copyright, patent, trademark, and 172 | attribution notices from the Source form of the Work, 173 | excluding those notices that do not pertain to any part of 174 | the Derivative Works; and 175 | 176 | (d) If the Work includes a "NOTICE" text file as part of its 177 | distribution, then any Derivative Works that You distribute must 178 | include a readable copy of the attribution notices contained 179 | within such NOTICE file, excluding those notices that do not 180 | pertain to any part of the Derivative Works, in at least one 181 | of the following places: within a NOTICE text file distributed 182 | as part of the Derivative Works; within the Source form or 183 | documentation, if provided along with the Derivative Works; or, 184 | within a display generated by the Derivative Works, if and 185 | wherever such third-party notices normally appear. The contents 186 | of the NOTICE file are for informational purposes only and 187 | do not modify the License. You may add Your own attribution 188 | notices within Derivative Works that You distribute, alongside 189 | or as an addendum to the NOTICE text from the Work, provided 190 | that such additional attribution notices cannot be construed 191 | as modifying the License. 192 | 193 | You may add Your own copyright statement to Your modifications and 194 | may provide additional or different license terms and conditions 195 | for use, reproduction, or distribution of Your modifications, or 196 | for any such Derivative Works as a whole, provided Your use, 197 | reproduction, and distribution of the Work otherwise complies with 198 | the conditions stated in this License. 199 | 200 | 5. Submission of Contributions. Unless You explicitly state otherwise, 201 | any Contribution intentionally submitted for inclusion in the Work 202 | by You to the Licensor shall be under the terms and conditions of 203 | this License, without any additional terms or conditions. 204 | Notwithstanding the above, nothing herein shall supersede or modify 205 | the terms of any separate license agreement you may have executed 206 | with Licensor regarding such Contributions. 207 | 208 | 6. Trademarks. This License does not grant permission to use the trade 209 | names, trademarks, service marks, or product names of the Licensor, 210 | except as required for reasonable and customary use in describing the 211 | origin of the Work and reproducing the content of the NOTICE file. 212 | 213 | 7. Disclaimer of Warranty. Unless required by applicable law or 214 | agreed to in writing, Licensor provides the Work (and each 215 | Contributor provides its Contributions) on an "AS IS" BASIS, 216 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 217 | implied, including, without limitation, any warranties or conditions 218 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 219 | PARTICULAR PURPOSE. You are solely responsible for determining the 220 | appropriateness of using or redistributing the Work and assume any 221 | risks associated with Your exercise of permissions under this License. 222 | 223 | 8. Limitation of Liability. In no event and under no legal theory, 224 | whether in tort (including negligence), contract, or otherwise, 225 | unless required by applicable law (such as deliberate and grossly 226 | negligent acts) or agreed to in writing, shall any Contributor be 227 | liable to You for damages, including any direct, indirect, special, 228 | incidental, or consequential damages of any character arising as a 229 | result of this License or out of the use or inability to use the 230 | Work (including but not limited to damages for loss of goodwill, 231 | work stoppage, computer failure or malfunction, or any and all 232 | other commercial damages or losses), even if such Contributor 233 | has been advised of the possibility of such damages. 234 | 235 | 9. Accepting Warranty or Additional Liability. While redistributing 236 | the Work or Derivative Works thereof, You may choose to offer, 237 | and charge a fee for, acceptance of support, warranty, indemnity, 238 | or other liability obligations and/or rights consistent with this 239 | License. However, in accepting such obligations, You may act only 240 | on Your own behalf and on Your sole responsibility, not on behalf 241 | of any other Contributor, and only if You agree to indemnify, 242 | defend, and hold each Contributor harmless for any liability 243 | incurred by, or claims asserted against, such Contributor by reason 244 | of your accepting any such warranty or additional liability. 245 | 246 | END OF TERMS AND CONDITIONS 247 | 248 | APPENDIX: How to apply the Apache License to your work. 249 | 250 | To apply the Apache License to your work, attach the following 251 | boilerplate notice, with the fields enclosed by brackets "[]" 252 | replaced with your own identifying information. (Don't include 253 | the brackets!) The text should be enclosed in the appropriate 254 | comment syntax for the file format. We also recommend that a 255 | file or class name and description of purpose be included on the 256 | same "printed page" as the copyright notice for easier 257 | identification within third-party archives. 258 | 259 | Copyright [yyyy] [name of copyright owner] 260 | 261 | Licensed under the Apache License, Version 2.0 (the "License"); 262 | you may not use this file except in compliance with the License. 263 | You may obtain a copy of the License at 264 | 265 | http://www.apache.org/licenses/LICENSE-2.0 266 | 267 | Unless required by applicable law or agreed to in writing, software 268 | distributed under the License is distributed on an "AS IS" BASIS, 269 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 270 | See the License for the specific language governing permissions and 271 | limitations under the License. 272 | 273 | 274 | 275 | ## Runtime Library Exception to the Apache 2.0 License: ## 276 | 277 | 278 | As an exception, if you use this Software to compile your source code and 279 | portions of this Software are embedded into the binary product as a result, 280 | you may redistribute such product without providing attribution as would 281 | otherwise be required by Sections 4(a), 4(b) and 4(d) of the License. 282 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.3 2 | 3 | import PackageDescription 4 | 5 | let package = Package( 6 | name: "BugfenderPackage", 7 | platforms: [ 8 | .iOS("12") 9 | ], 10 | products: [ 11 | .library( 12 | name: "BugfenderLibrary", 13 | targets: ["BugfenderSDK"]) 14 | ], 15 | targets: [ 16 | .binaryTarget( 17 | name: "BugfenderSDK", 18 | url: "https://github.com/bugfender/BugfenderSDK-iOS/releases/download/2.0.1/BugfenderSDK.xcframework.zip", 19 | checksum: "08f8d986e21601cadea8568fcee60955efa02d3697e57683b3e741072a65659b" 20 | ) 21 | ] 22 | ) 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Bugfender SDK for iOS [![Docs](https://img.shields.io/badge/docs-%E2%9C%93-blue.svg)](https://bugfender.github.io/BugfenderSDK-iOS/) 2 | =================== 3 | 4 | Bugfender is a cloud service to collect mobile application logs. Developers can control log sending programmatically and manually for each device. Logs are available at the [Bugfender dashboard](https://dashboard.bugfender.com/). You'll need an account. 5 | 6 | Supported iOS versions: 7 | * BugfenderSDK 2.0 works for iOS 12.0 and newer. 8 | * For iOS 11.0 support you can use BugfenderSDK 1.12. 9 | * For iOS 10 support you can use BugfenderSDK 1.10.6. 10 | * For iOS 8 support you can use BugfenderSDK 1.8. 11 | 12 | # Using Bugfender 13 | Once you have the framework in your project, using it is as easy as using `BFLog()` instead of `NSLog()` or `bfprint()` instead `print()`. 14 | 15 | ## Swift 16 | 17 | If your application uses SwiftUI and doesn't have an AppDelegate, you might need to create one like this: 18 | 19 | ```Swift 20 | @main 21 | struct YourAppNameApp: App { 22 | 23 | @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate 24 | 25 | var body: some Scene { 26 | WindowGroup { 27 | ContentView() 28 | } 29 | } 30 | } 31 | 32 | class AppDelegate: NSObject, UIApplicationDelegate { 33 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { 34 | Bugfender.activateLogger("YOUR_APP_KEY") 35 | Bugfender.enableUIEventLogging() // optional, log user interactions automatically 36 | Bugfender.enableCrashReporting() // optional, log crashes automatically 37 | bfprint("Hello world!") // use bfprint() as you would use 38 | return true 39 | } 40 | } 41 | ``` 42 | Then you may use `BFLog` as you would normally use `NSLog` or `print`. 43 | 44 | You may also want to specify a logging level by using the following helper functions: 45 | 46 | - `Bugfender.print(...)`: Default log. 47 | - `Bugfender.warning(...)`: Warning log. 48 | - `Bugfender.error(...)`: Error log. 49 | 50 | ## Objective-C 51 | 52 | Make Bugfender available project-wide by adding the following line to the `.pch` file: 53 | 54 | ```objective-c 55 | #import 56 | ``` 57 | 58 | Get an API key from the [Bugfender console](https://app.bugfender.com/). In your `AppDelegate` call [activateLogger](http://cocoadocs.org/docsets/BugfenderSDK/0.3.9/Classes/Bugfender.html#//api/name/activateLogger:) when the application starts, like this: 59 | 60 | ```objective-c 61 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 62 | { 63 | ... 64 | // Activate the remote logger with an App Key. 65 | [Bugfender activateLogger:@"YOUR_APP_KEY"]; 66 | [Bugfender enableNSLogLogging]; // optional, capture logs printed to console automatically 67 | [Bugfender enableUIEventLogging]; // optional, log user interactions automatically 68 | [Bugfender enableCrashReporting]; // optional, log crashes automatically 69 | BFLog("Hello world!") // use BFLog as you would use NSLog 70 | ... 71 | } 72 | ``` 73 | 74 | You may use `BFLog` as you would normally use `NSLog`. 75 | 76 | You may also want to specify a logging level by using the following macros: 77 | 78 | - `BFLogFatal(...)`: Fatal log. 79 | - `BFLogErr(...)`: Error log. 80 | - `BFLogWarn(...)`: Warning log. 81 | - `BFLogInfo(...)`: Info log. 82 | - `BFLog(...)`: Default (debug) log. 83 | - `BFLogTrace(...)`: Trace log. 84 | 85 | # Documentation 86 | For information on how to use our SDK, you can check the [documentation](https://docs.bugfender.com/docs/category/ios/) to configure your project. 87 | -------------------------------------------------------------------------------- /docs/User-feedback-custom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/docs/User-feedback-custom.png -------------------------------------------------------------------------------- /docs/User-feedback-default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/docs/User-feedback-default.png -------------------------------------------------------------------------------- /generate-docs: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | bundle install 3 | bundle exec jazzy \ 4 | --clean \ 5 | --umbrella-header BugfenderSDK.framework/Headers/BugfenderSDK.h \ 6 | --framework-root ./BugfenderSDK.framework \ 7 | --output ../BugfenderSDK-iOS-gh-pages \ 8 | --sdk iphonesimulator 9 | -------------------------------------------------------------------------------- /readme-images/User-feedback-custom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/readme-images/User-feedback-custom.png -------------------------------------------------------------------------------- /readme-images/spm/spm1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/readme-images/spm/spm1.png -------------------------------------------------------------------------------- /readme-images/spm/spm2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/readme-images/spm/spm2.png -------------------------------------------------------------------------------- /readme-images/spm/spm3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/readme-images/spm/spm3.png -------------------------------------------------------------------------------- /readme-images/spm/spm4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/readme-images/spm/spm4.png -------------------------------------------------------------------------------- /readme-images/spm/spm5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/readme-images/spm/spm5.png -------------------------------------------------------------------------------- /upload-symbols.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | token=${1:-$BUGFENDER_SYMBOLICATION_TOKEN} 5 | if [ -z "$token" ]; then 6 | echo 'Symbolication Token is required' 7 | exit 0 # Do not fail, we don't want to break people's BC builds 8 | fi 9 | url=${BUGFENDER_SYMBOLICATION_URL:-https://dashboard.bugfender.com/} 10 | [[ "$url" != */ ]] && url="$url/" 11 | 12 | version=$MARKETING_VERSION 13 | build=$CURRENT_PROJECT_VERSION 14 | 15 | dsympath="$DWARF_DSYM_FOLDER_PATH/$DWARF_DSYM_FILE_NAME" 16 | if [ -f "$dsympath" ] && [ ! -s "$dsympath" ]; then 17 | echo 'dSYM path leads to an empty file' 18 | echo 'Check that you are not hitting https://developer.apple.com/forums/thread/659187' 19 | exit 0 # Do not fail, we don't want to break people's BC builds 20 | fi 21 | if [ -z "$(find "$dsympath" -type f)" ]; then 22 | echo 'No files found inside dSYM bundle' 23 | echo 'Probably a BitCode enabled build?' 24 | echo 'For now, these have to have symbols uploaded manually through the Dashboard' 25 | exit 0 # Do not fail, we don't want to break people's BC builds 26 | fi 27 | 28 | tempdir=$(mktemp -d -t 'bugfender') 29 | zippath="$tempdir/dSYMs.zip" 30 | function cleanup { 31 | rm -f "$zippath" 32 | rmdir "$tempdir" 33 | } 34 | trap cleanup EXIT 35 | 36 | zip -r "$zippath" "$dsympath" 37 | 38 | resp=$(curl -i# \ 39 | -H "Authorization: Bearer $token" \ 40 | -F version="$version" \ 41 | -F build="$build" \ 42 | -F file=@"$zippath" \ 43 | "${url}api/upload-symbols" 44 | ) 45 | statuscode=$(echo "$resp" | head -n1 | cut -d' ' -f2) 46 | if [ "$statuscode" -eq 100 ]; then 47 | statuscode=$(echo "$resp" | head -n3 | tail -n1 | cut -d' ' -f2) 48 | fi 49 | if [ "$statuscode" -ne 200 ]; then 50 | message=$(echo "$resp" | tail -n1) 51 | echo "Upload failed with code $statuscode and message: $message" 52 | exit 0 # Do not fail, we don't want to break people's BC builds 53 | fi 54 | -------------------------------------------------------------------------------- /xcode-upload-symbols/README.md: -------------------------------------------------------------------------------- 1 | Bugfender iOS Symbols Upload Script 2 | =================================== 3 | 4 | Used to automatically upload dSYM bundles to [Bugfender](https://bugfender.com). 5 | 6 | Our upload script is meant to be executed locally from the Xcode build environment. It may not yet function in Xcode Cloud. 7 | 8 | ## Enable Symbol Creation 9 | 10 | 1. Open project settings. 11 | 12 | 1. Select your main target from the *TARGETS* list on the left. 13 | 14 | 1. Select the *Build Settings* tab. 15 | 16 | 1. Ensure that `Debug Information Format` is set to `DWARF with dSYM File`. 17 | 18 | ## Configure Build to Upload Symbols 19 | 20 | 1. Open project settings. 21 | 22 | 1. Select your main target from the *TARGETS* list on the left. 23 | 24 | 1. Select the *Build Settings* tab, find **Build Options** > **User Script Sandboxing** and set it to **No**. 25 | 26 | 1. Select the *Build Phases* tab. 27 | 28 | 1. Open menu under the `+` sign and select *New Run Script Phase*. 29 | 30 | 1. Configure the new *Run Script* as follows: 31 | 32 | * If you are using CocoaPods: 33 | ```sh 34 | ${PODS_ROOT}/BugfenderSDK/upload-symbols.sh 35 | ``` 36 | 37 | * If you using SPM: 38 | 39 | ```sh 40 | BUGFENDER_SYMBOLICATION_URL=https://dashboard.bugfender.com/ ${BUILD_DIR%Build/*}SourcePackages/checkouts/BugfenderSDK-iOS/xcode-upload-symbols/upload-symbols.sh 41 | ``` 42 | 43 | * If you copied the script manually: 44 | ```sh 45 | /upload-symbols.sh 46 | ``` 47 | 48 | * The **bugfender symbolication token** can be obtained from the Bugfender Dashboard and needs to be specified either as a first argument to the script or setting the `BUGFENDER_SYMBOLICATION_TOKEN` environment variable. 49 | 50 | 1. Under the "Input Files" section, add the following path. This will provide access to the debug symbols to our upload script. 51 | 52 | `${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}` 53 | 54 | 1. Done! Here is a screenshot of what the complete settings would look like if you were using SPM. 55 | 56 | ![XCode Build Phases](/xcode-upload-symbols/xcode.png) 57 | -------------------------------------------------------------------------------- /xcode-upload-symbols/upload-symbols.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | token=${1:-$BUGFENDER_SYMBOLICATION_TOKEN} 5 | if [ -z "$token" ]; then 6 | echo 'Symbolication Token is required' 7 | exit 0 # Do not fail, we don't want to break people's BC builds 8 | fi 9 | url=${BUGFENDER_SYMBOLICATION_URL:-https://dashboard.bugfender.com/} 10 | [[ "$url" != */ ]] && url="$url/" 11 | 12 | version=$MARKETING_VERSION 13 | build=$CURRENT_PROJECT_VERSION 14 | 15 | dsympath="$DWARF_DSYM_FOLDER_PATH/$DWARF_DSYM_FILE_NAME" 16 | if [ -f "$dsympath" ] && [ ! -s "$dsympath" ]; then 17 | echo 'dSYM path leads to an empty file' 18 | echo 'Check that you are not hitting https://developer.apple.com/forums/thread/659187' 19 | exit 0 # Do not fail, we don't want to break people's BC builds 20 | fi 21 | if [ -z "$(find "$dsympath" -type f)" ]; then 22 | echo 'No files found inside dSYM bundle' 23 | echo 'Probably a BitCode enabled build?' 24 | echo 'For now, these have to have symbols uploaded manually through the Dashboard' 25 | exit 0 # Do not fail, we don't want to break people's BC builds 26 | fi 27 | 28 | tempdir=$(mktemp -d -t 'bugfender') 29 | zippath="$tempdir/dSYMs.zip" 30 | function cleanup { 31 | rm -f "$zippath" 32 | rmdir "$tempdir" 33 | } 34 | trap cleanup EXIT 35 | 36 | zip -r "$zippath" "$dsympath" 37 | 38 | resp=$(curl -i# \ 39 | -H "Authorization: Bearer $token" \ 40 | -F version="$version" \ 41 | -F build="$build" \ 42 | -F file=@"$zippath" \ 43 | "${url}api/upload-symbols" 44 | ) 45 | statuscode=$(echo "$resp" | head -n1 | cut -d' ' -f2) 46 | if [ "$statuscode" -eq 100 ]; then 47 | statuscode=$(echo "$resp" | head -n3 | tail -n1 | cut -d' ' -f2) 48 | fi 49 | if [ "$statuscode" -ne 200 ]; then 50 | message=$(echo "$resp" | tail -n1) 51 | echo "Upload failed with code $statuscode and message: $message" 52 | exit 0 # Do not fail, we don't want to break people's BC builds 53 | fi 54 | -------------------------------------------------------------------------------- /xcode-upload-symbols/xcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bugfender/BugfenderSDK-iOS/2e92940c702c9182352fa5a213e472da62ad69c1/xcode-upload-symbols/xcode.png --------------------------------------------------------------------------------