Post

Replies

Boosts

Views

Activity

Swap rootViewController with animation?
I'm trying to swap out the rootViewController in my appDelegate with an animation and it is just flashing to the new viewController without any animation.-(void)showRootController:(UIViewController *)controller { [UIView transitionWithView:self.window duration:0.5 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ self.window.rootViewController = controller; [self.window makeKeyAndVisible]; } completion:nil]; }How can I do this with an animation? (Testing on an iPhone 5s with iOS 8)
3
0
7.2k
Jun ’15
Unknown class in Compiled Swift Framework embedded in Objective-C Project
I have a framework binary built with Swift that I'm trying to incorporate into an Objective-C project. However the class in the framework isn't available.In the swift framework, the class is defined like this:@objcMembers @objc public final class Messaging: NSObject, UINavigationControllerDelegate, LogsManagerDelegate { ... }I drag the archived and exported framework directly into the project to use and make sure the Defines Module is set to Yes in the Build Settings.In the Objective-C I try to use the framework:@import ContactAtOnceMessaging; @implementation MessagingExperience Messaging *messaging; // Unknown type name 'Messaging' ... @endIf I drag the code for the framework directly into the project, Messaging is a known class so I know the Swift is okay.I also tried changing the import to the following, but that didn't work. #import "ContactAtOnceMessaging/ContactAtOnceMessaging-Swift.h"What am I doing wrong?
6
0
2.7k
Jan ’18
Fat Framework Script for Xcode 10?
I used this script in the post-action of the archive in my scheme to make a FAT binary framework. One that will work on the simulator and actual device.`https://gist.github.com/gauravkeshre/eabb2a13ef6d673fadec84ca60b56b05`Does anyone know how to convert it to work with Xcode 10?Here is the script itself: exec > /tmp/${PROJECT_NAME}_archive.log 2>&1 UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal if [ "true" == ${ALREADYINVOKED:-false} ] then echo "RECURSION: Detected, stopping" else export ALREADYINVOKED="true" # make sure the output directory exists mkdir -p "${UNIVERSAL_OUTPUTFOLDER}" echo "Building for iPhoneSimulator" xcodebuild -workspace "${WORKSPACE_PATH}" -scheme "${TARGET_NAME}" -configuration ${CONFIGURATION} -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone XS' ONLY_ACTIVE_ARCH=NO ARCHS='i386 x86_64' BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" ENABLE_BITCODE=YES OTHER_CFLAGS="-fembed-bitcode" BITCODE_GENERATION_MODE=bitcode clean build # Step 1. Copy the framework structure (from iphoneos build) to the universal folder echo "Copying to output folder" cp -R "${ARCHIVE_PRODUCTS_PATH}${INSTALL_PATH}/${FULL_PRODUCT_NAME}" "${UNIVERSAL_OUTPUTFOLDER}/" # Step 2. Copy Swift modules from iphonesimulator build (if it exists) to the copied framework directory SIMULATOR_SWIFT_MODULES_DIR="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/Modules/${TARGET_NAME}.swiftmodule/." if [ -d "${SIMULATOR_SWIFT_MODULES_DIR}" ]; then cp -R "${SIMULATOR_SWIFT_MODULES_DIR}" "${UNIVERSAL_OUTPUTFOLDER}/${TARGET_NAME}.framework/Modules/${TARGET_NAME}.swiftmodule" fi # Step 3. Create universal binary file using lipo and place the combined executable in the copied framework directory echo "Combining executables" lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/${EXECUTABLE_PATH}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${EXECUTABLE_PATH}" "${ARCHIVE_PRODUCTS_PATH}${INSTALL_PATH}/${EXECUTABLE_PATH}" # Step 4. Create universal binaries for embedded frameworks # for SUB_FRAMEWORK in $( ls "${UNIVERSAL_OUTPUTFOLDER}/${TARGET_NAME}.framework/Frameworks" ); do # BINARY_NAME="${SUB_FRAMEWORK%.*}" # lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/${TARGET_NAME}.framework/Frameworks/${SUB_FRAMEWORK}/${BINARY_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${SUB_FRAMEWORK}/${BINARY_NAME}" "${ARCHIVE_PRODUCTS_PATH}${INSTALL_PATH}/${TARGET_NAME}.framework/Frameworks/${SUB_FRAMEWORK}/${BINARY_NAME}" # done # Step 5. Convenience step to copy the framework to the project's directory echo "Copying to project dir" yes | cp -Rf "${UNIVERSAL_OUTPUTFOLDER}/${FULL_PRODUCT_NAME}" "${PROJECT_DIR}" open "${PROJECT_DIR}" fi
14
0
15k
Oct ’18
How to use dependencies in a Swift Package
I created a new Package with Xcode and incorporated a dependency, however when I try to use it, I get a "No such module" error. How do I use the dependency in the Package sources? In a normal project, I can easily import and use AgileDB. Here's the Package: // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package(     name: "DBCore",     products: [         // Products define the executables and libraries a package produces, and make them visible to other packages.         .library(             name: "DBCore",             targets: ["DBCore"]),     ],     dependencies: [   .package(url: "https://github.com/AaronBratcher/AgileDB", from: "6.4.0")     ],     targets: [         // Targets are the basic building blocks of a package. A target can define a module or a test suite.         // Targets can depend on other targets in this package, and on products in packages this package depends on.         .target(             name: "DBCore",             dependencies: []),         .testTarget(             name: "DBCoreTests",             dependencies: ["DBCore"]),     ] ) Perhaps the AgileDB package as a dependency in the target? I tried copying that and it won't recognize it.
1
0
806
Apr ’22
Is there a cleaner way of making an enum with associated value conform to rawRepresentable?
I have this in my code and it works, however if I have a long list it gets tiresome. Is there a better way of having an enum with associated values that also conforms to RawRepresentable? public enum IconColor { case regular case error case warning case success case custom(String) public var value: Color { return loadColor(self.rawValue) } } extension IconColor: RawRepresentable { public var rawValue: String { switch self { case .regular: return "icon_regular" case .error: return "icon_error" case .warning: return "icon_warning" case .success: return "icon_success" case .custom(let value): return value } } public init(rawValue: String) { switch rawValue { case "icon_regular": self = .regular case "icon_error": self = .error case "icon_warning": self = .warning case "icon_success": self = .success default: self = .custom(rawValue) } } }
3
0
619
Jul ’22
How do I get updated custom EnvironmentValues after a method call?
I have a custom EnvironmentVariable called analyticsData. On the button tap, I want to perform my button's action and then call a method to send this data. struct PrimaryButton: View { @Environment(\.analyticsData) private var analyticsData private let title: String private let action: (() -> Void) init(_ title: String, action: @escaping (() -> Void)) { self.title = title self.action = action } var body: some View { Button(action: handleTap) { Text(title) } } func handleTap() { action() // need updated value of analyticsData here! AnalyticsProxy.shared.sendAnalytics(analyticsData) } } At the point of use for this PrimaryButton, I would like to update my data dynamically. However, tapping between my 2 buttons, the data is 1 click behind. button 1 tapped, analytics output: buttonTapped = "" button 2 tapped, analytics output: buttonTapped = "B1" button 1 tapped, analytics output: buttonTapped = "B2" In my PrimaryButton handleTap method (above), I need to get the updated value of the environmentVariable before sending the analytics. Is this possible? Point of use: struct ContentView: View { @State var buttonTapped = "" var body: some View { VStack(spacing: 64) { PrimaryButton("Button 1") { buttonTapped = "B1" }.analytics(type: .event, name: "Button Tap", data: ["Button": buttonTapped]) PrimaryButton("Button 2") { buttonTapped = "B2" }.analytics(type: .event, name: "Button Tap", data: ["Button": buttonTapped]) } } }
2
0
613
Jul ’22
largeTitleDisplayMode doesn't work when using UIHostingController
When using a UIHostingController to host my SwiftUI content, I can't get the navigation title to start large and shift to inline as the user scrolls. Is this a known problem with using the UIHostingController? var viewModel: DashboardViewModel! lazy var contentView = UIHostingController(rootView: DashboardView(viewModel: viewModel)) override func viewDidLoad() { super.viewDidLoad() addChild(contentView) view.addSubview(contentView.view) setupConstraints() navigationItem.title = "Test Title" navigationItem.largeTitleDisplayMode = .automatic } The title in the navigation controller shows inline
4
1
1.6k
Aug ’22
Xcode 14 NavigationPath – two views pushed onto nav stack when multiple links in form section
Create new SwiftUI project Replace ContentView with the code below Tap either link. Both views are pushed onto the nav stack class ContentViewModel: ObservableObject { @Published var navigationPath = NavigationPath() } struct ContentView: View { @StateObject var viewModel = ContentViewModel() var body: some View { NavigationStack(path: $viewModel.navigationPath) { Form { Section { VStack { NavigationLink(value: 1) { Text("Location") } NavigationLink(value: 2) { Text("Category") } } } }.navigationDestination(for: Int.self) { route in switch route { case 1: Text("Location") case 2: Text("Category") default: Text("Unknown") } }.navigationTitle("Home") } } } What am I doing wrong? I would only expect the tapped item to be pushed into the stack.
1
0
682
Oct ’22
Why is rotationEffect moving vertically too?
I have my animation for the rotation working beautifully, but the image is also moving vertically. Why? struct SyncView: View { @State var isSyncing = false let animation: Animation = Animation.linear(duration: 2.0).repeatForever(autoreverses: false) var body: some View { VStack(spacing: 16) { HStack { VStack(alignment: .leading) { Text("Linked Device's Name") Text("Updating (Last update: Oct 1, 2022)") .font(.callout) .foregroundColor(.gray) } Spacer() Text(Image(systemName: "arrow.triangle.2.circlepath")) .foregroundStyle(Color.yellow) .font(.title) .rotationEffect(Angle.degrees(isSyncing ? 360 : 0)) .animation(animation, value: isSyncing) } } .padding() .onAppear { isSyncing = true } } }
1
0
551
Nov ’22
DropInfo doesn't contain my drag object in SwiftUI
I have these extensions to my NSObject, Codable class: extension SavingsGoal: NSItemProviderWriting { public static let typeIdentifier = "com.AaronLBratcher.SavingsGoal.Drag" public static var writableTypeIdentifiersForItemProvider: [String] { [typeIdentifier] } public typealias DragHandler = (Data?, Error?) -> Void public func loadData(withTypeIdentifier typeIdentifier: String, forItemProviderCompletionHandler completionHandler: @escaping DragHandler) -> Progress? { do { print("^^^ encoding") let encoder = JSONEncoder() encoder.outputFormatting = .prettyPrinted completionHandler(try encoder.encode(self), nil) } catch { completionHandler(nil, error) } return nil } } extension SavingsGoal: NSItemProviderReading { public static var readableTypeIdentifiersForItemProvider: [String] { [typeIdentifier] } public static func object(withItemProviderData data: Data, typeIdentifier: String) throws -> SavingsGoal { print("^^^ decoding") let decoder = JSONDecoder() return try decoder.decode(SavingsGoal.self, from: data) } } and these onDrag, onDrop method calls on my Views: .onDrag { NSItemProvider(object: goal) } .onDrop(of: [SavingsGoal.typeIdentifier], delegate: viewModel) Visually the drag works on the simulator, showing a plus when it hits the target View, however only the delegate's performDrop call is made. The loadData and object methods are not called in the extensions and the DropInfo doesn't contain my object. I have carefully checked and rechecked the code against available examples and cannot find what I did wrong.
1
0
546
Dec ’22