diff --git a/Podfile b/Podfile index f6a3ff716..f3972ab16 100644 --- a/Podfile +++ b/Podfile @@ -13,6 +13,34 @@ target 'Signal' do #pod 'SignalServiceKit', path: '../SignalServiceKit' pod 'SocketRocket', :git => 'https://github.com/facebook/SocketRocket.git' target 'SignalTests' do - inherit! :search_paths + inherit! :search_paths end + + post_install do |installer| + # Disable some asserts when building for tests + set_building_for_tests_config(installer, 'SignalServiceKit') + end +end + +# There are some asserts and debug checks that make testing difficult - e.g. Singleton asserts +def set_building_for_tests_config(installer, target_name) + target = installer.pods_project.targets.detect { |target| target.to_s == target_name } + if target == nil + throw "failed to find target: #{target_name}" + end + + build_config_name = "Test" + build_config = target.build_configurations.detect { |config| config.to_s == build_config_name } + if build_config == nil + throw "failed to find config: #{build_config_name} for target: #{target_name}" + end + + puts "--[!] Disabling singleton enforcement for target: #{target} in config: #{build_config}" + existing_definitions = build_config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] + + if existing_definitions == nil || existing.length == 0 + existing_definitions = "$(inheritied)" + end + build_config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = "#{existing_definitions} POD_CONFIGURATION_TEST=1 COCOAPODS=1 SSK_BUILDING_FOR_TESTS=1" end + diff --git a/Podfile.lock b/Podfile.lock index bbeaabfbf..87ce8631c 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -164,6 +164,6 @@ SPEC CHECKSUMS: UnionFind: c33be5adb12983981d6e827ea94fc7f9e370f52d YapDatabase: cd911121580ff16675f65ad742a9eb0ab4d9e266 -PODFILE CHECKSUM: 4a21cd1bb2804a399fe7f9b696bd2f591f1df663 +PODFILE CHECKSUM: 01ecc4364fb2fdfda23d3cfcfd40db751738cc4a COCOAPODS: 1.2.1 diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index de4daad71..29412106e 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -371,6 +371,7 @@ /* Begin PBXFileReference section */ 1B5E7D6C9007F5E5761D79DD /* libPods-SignalTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-SignalTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1CE3CD5C23334683BDD3D78C /* Pods-Signal.test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Signal.test.xcconfig"; path = "Pods/Target Support Files/Pods-Signal/Pods-Signal.test.xcconfig"; sourceTree = ""; }; 34009B651EC4CB11001D95D1 /* OWSMath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSMath.h; sourceTree = ""; }; 3400C7901EAF89CD008A8584 /* SendExternalFileViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SendExternalFileViewController.h; sourceTree = ""; }; 3400C7911EAF89CD008A8584 /* SendExternalFileViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SendExternalFileViewController.m; sourceTree = ""; }; @@ -676,6 +677,7 @@ 76EB052E18170B33006006FC /* ContactTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactTableViewCell.h; sourceTree = ""; }; 76EB052F18170B33006006FC /* ContactTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactTableViewCell.m; sourceTree = ""; }; 7DB8EE72F8522189E3E2CB45 /* libPods-Signal.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Signal.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 8981C8F64D94D3C52EB67A2C /* Pods-SignalTests.test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SignalTests.test.xcconfig"; path = "Pods/Target Support Files/Pods-SignalTests/Pods-SignalTests.test.xcconfig"; sourceTree = ""; }; 954AEE681DF33D32002E5410 /* ContactsPickerTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactsPickerTest.swift; sourceTree = ""; }; A11CD70C17FA230600A2D1B1 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; A163E8AA16F3F6A90094D68B /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; @@ -1432,6 +1434,8 @@ DF728B4B438716EAF95CEC18 /* Pods-Signal.app store release.xcconfig */, AD2AB1207E8888E4262D781B /* Pods-SignalTests.debug.xcconfig */, E85DB184824BA9DC302EC8B3 /* Pods-SignalTests.app store release.xcconfig */, + 1CE3CD5C23334683BDD3D78C /* Pods-Signal.test.xcconfig */, + 8981C8F64D94D3C52EB67A2C /* Pods-SignalTests.test.xcconfig */, ); name = Pods; sourceTree = ""; @@ -2415,6 +2419,195 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 451DA3CC1F152887008E2423 /* Test */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_RECEIVER_WEAK = YES; + CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__ARC_BRIDGE_CAST_NONARC = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + ENABLE_BITCODE = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = ( + "DEBUG=1", + "$(inherited)", + "SSK_BUILDING_FOR_TESTS=1", + ); + GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES; + GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; + GCC_WARN_ABOUT_MISSING_NEWLINE = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES; + GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; + GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; + GCC_WARN_MISSING_PARENTHESES = YES; + GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = YES; + GCC_WARN_SHADOW = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_STRICT_SELECTOR_MATCH = YES; + GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNKNOWN_PRAGMAS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = YES; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ""; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + ONLY_ACTIVE_ARCH = YES; + OTHER_CFLAGS = "-fobjc-arc-exceptions"; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Test; + }; + 451DA3CD1F152887008E2423 /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1CE3CD5C23334683BDD3D78C /* Pods-Signal.test.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Signal/Signal.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = U68MSDN6DR; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Signal/Signal-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + HAVE_CONFIG_H, + ); + GCC_STRICT_ALIASING = NO; + GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO; + GCC_WARN_STRICT_SELECTOR_MATCH = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "\"${SRCROOT}/RedPhone/lib/ogg/include\"", + "\"${SRCROOT}/RedPhone/lib/debug/include\"", + "\"$(SRCROOT)/libtommath\"", + "\"$(SRCROOT)/libtomcrypt/headers\"", + "\"$(SRCROOT)/MMDrawerController\"", + "\"$(SRCROOT)/Libraries\"/**", + ); + INFOPLIST_FILE = "$(SRCROOT)/Signal/Signal-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)", + ); + LLVM_LTO = NO; + OTHER_LDFLAGS = "$(inherited)"; + PRODUCT_BUNDLE_IDENTIFIER = org.whispersystems.signal; + PRODUCT_NAME = Signal; + PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = iphoneos; + SWIFT_OBJC_BRIDGING_HEADER = "Signal/src/Signal-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; + TEST_AFTER_BUILD = YES; + VALID_ARCHS = "arm64 armv7 armv7s"; + WRAPPER_EXTENSION = app; + }; + name = Test; + }; + 451DA3CE1F152887008E2423 /* Test */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8981C8F64D94D3C52EB67A2C /* Pods-SignalTests.test.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + DEFINES_MODULE = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)", + "$(PROJECT_DIR)/Carthage/Build/iOS", + ); + GCC_GENERATE_TEST_COVERAGE_FILES = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Signal/Signal-Prefix.pch"; + GCC_VERSION = ""; + GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO; + GCC_WARN_STRICT_SELECTOR_MATCH = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + HEADER_SEARCH_PATHS = ( + "${PODS_HEADERS_SEARCH_PATHS}", + "$(inherited)", + "\"${SRCROOT}/Signal/lib/speex/include\"", + "\"${SRCROOT}/Signal/lib/ogg/include\"", + "\"${SRCROOT}/Signal/lib/debug/include\"", + "\"$(SRCROOT)/libtommath\"", + "\"$(SRCROOT)/libtomcrypt/headers\"", + "\"$(SRCROOT)/spandsp/spandsp/spandsp\"", + "\"$(SRCROOT)/Libraries\"/**", + "\"$(TARGET_TEMP_DIR)/../$(PROJECT_NAME).build/DerivedSources\"", + ); + INFOPLIST_FILE = "Signal/test/Supporting Files/SignalTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)", + ); + OTHER_LDFLAGS = ( + "-all_load", + "-ObjC", + "$(inherited)", + ); + PRODUCT_BUNDLE_IDENTIFIER = "org.whispersystems.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = SignalTests; + PROVISIONING_PROFILE = ""; + SWIFT_OBJC_BRIDGING_HEADER = "Signal/test/SignalTests-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Signal.app/Signal"; + VALID_ARCHS = "arm64 armv7s armv7 i386 x86_64"; + }; + name = Test; + }; D221A0BA169C9E5F00537ABF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2786,6 +2979,7 @@ isa = XCConfigurationList; buildConfigurations = ( D221A0BA169C9E5F00537ABF /* Debug */, + 451DA3CC1F152887008E2423 /* Test */, D221A0BB169C9E5F00537ABF /* App Store Release */, ); defaultConfigurationIsVisible = 0; @@ -2795,6 +2989,7 @@ isa = XCConfigurationList; buildConfigurations = ( D221A0BD169C9E5F00537ABF /* Debug */, + 451DA3CD1F152887008E2423 /* Test */, D221A0BE169C9E5F00537ABF /* App Store Release */, ); defaultConfigurationIsVisible = 0; @@ -2804,6 +2999,7 @@ isa = XCConfigurationList; buildConfigurations = ( D221A0C0169C9E5F00537ABF /* Debug */, + 451DA3CE1F152887008E2423 /* Test */, D221A0C1169C9E5F00537ABF /* App Store Release */, ); defaultConfigurationIsVisible = 0; diff --git a/Signal.xcodeproj/xcshareddata/xcschemes/Signal.xcscheme b/Signal.xcodeproj/xcshareddata/xcschemes/Signal.xcscheme index c74cfaba0..f21a4537c 100644 --- a/Signal.xcodeproj/xcshareddata/xcschemes/Signal.xcscheme +++ b/Signal.xcodeproj/xcshareddata/xcschemes/Signal.xcscheme @@ -28,7 +28,7 @@ buildForAnalyzing = "YES"> @@ -37,7 +37,7 @@