Post

Replies

Boosts

Views

Activity

Reply to building for iOS Simulator, but linking in object file built for macOS, file '..customLib.a' for architecture x86_64
@Developer Tools Engineer, My library's Base SDK is already set to iOS and I need to get a .a file that supports both iOS real device and simulators. If I only build for simulators I am getting only architectures for simulators. Here is my Post Script to make an universal .a define output folder environment variable UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal Step 1. Build Device and Simulator versions xcodebuild -target CustomLib ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos  BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" xcodebuild -target CustomLib -configuration ${CONFIGURATION} -sdk iphonesimulator -arch x86_64 -arch i386 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" make sure the output directory exists mkdir -p "${UNIVERSAL_OUTPUTFOLDER}" Step 2. Create universal binary file using lipo lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a" I don't know why the library is building for macOS. However, otool -lv customLib.a | grep -A5 LC_BUILD produces no output for me. Need suggestion.
Oct ’20
Reply to NSUserDefaults might be NULL when app is launched
This happens due to Apples data protection policy which is at some level obscure. I have been using an workaround so far which is working consistently. When app's launched check if keychain is inaccessible or not, if inaccessible just kill your app. (BOOL) isKeychainAccessible { 		NSString *keychainAvailablilityTestKey = @"keychainAvailablilityTestKey"; 		NSString *keychainAvailablilityTestValue = @"keychainAvailablilityTestValue"; 		[self createKeychainValue:keychainAvailablilityTestValue forIdentifier:keychainAvailablilityTestKey]; 		NSString *loadedValue = [self keychainStringFromMatchingIdentifier:keychainAvailablilityTestKey]; 		[self deleteItemFromKeychainWithIdentifier:keychainAvailablilityTestKey]; 		return ([keychainAvailablilityTestValue isEqualToString: loadedValue]); }
Oct ’20