Slide 1

Slide 1 text

Unify targets for multiple platforms into one target

Slide 2

Slide 2 text

https://github.com/kishikawakatsumi/ kishikawa katsumi http://kishikawakatsumi.com/ Realm

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

How to achieve it?

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

Aggregate each settings of targets with xcconfings

Slide 14

Slide 14 text

Base.xcconfig ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; ... GCC_WARN_UNUSED_FUNCTION = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; CODE_SIGN_IDENTITY[sdk=iphoneos*] = iPhone Developer; MACOSX_DEPLOYMENT_TARGET = 10.9; IPHONEOS_DEPLOYMENT_TARGET = 8.0; WATCHOS_DEPLOYMENT_TARGET = 2.0; TVOS_DEPLOYMENT_TARGET = 9.0;

Slide 15

Slide 15 text

Debug.xcconfig #include "Base.xcconfig" BITCODE_GENERATION_MODE = marker; MTL_ENABLE_DEBUG_INFO = YES; COPY_PHASE_STRIP = NO; ENABLE_TESTABILITY = YES; GCC_OPTIMIZATION_LEVEL = 0; ONLY_ACTIVE_ARCH = YES; SWIFT_OPTIMIZATION_LEVEL = -Onone; GCC_PREPROCESSOR_DEFINITIONS = $(inherited) DEBUG=1;

Slide 16

Slide 16 text

Release.xcconfig #include "Base.xcconfig" BITCODE_GENERATION_MODE = bitcode; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; MTL_ENABLE_DEBUG_INFO = NO; VALIDATE_PRODUCT = YES;

Slide 17

Slide 17 text

KeychainAccess.xcconfig SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator watchos watchsimulator appletvos appletvsimulator; TARGETED_DEVICE_FAMILY = 1,2,3,4; PRODUCT_NAME = $(PROJECT_NAME); APPLICATION_EXTENSION_API_ONLY = YES; INFOPLIST_FILE = KeychainAccess/Info.plist; SKIP_INSTALL = YES; DEFINES_MODULE = YES; DYLIB_INSTALL_NAME_BASE = @rpath; ENABLE_BITCODE[sdk=iphone*] = YES; ENABLE_BITCODE[sdk=watch*] = YES; ENABLE_BITCODE[sdk=appletv*] = YES;

Slide 18

Slide 18 text

Tests.xcconfig SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator appletvos appletvsimulator; COMBINE_HIDPI_IMAGES = YES; PRODUCT_BUNDLE_IDENTIFIER = com.kishikawakatsumi.$ (PRODUCT_NAME:rfc1034identifier); PRODUCT_NAME = $(TARGET_NAME); APPLICATION_EXTENSION_API_ONLY = NO; INFOPLIST_FILE = KeychainAccessTests/Info.plist; EXCLUDED_SOURCE_FILE_NAMES[sdk=macosx*] = SharedCredentialTests.swift; EXCLUDED_SOURCE_FILE_NAMES[sdk=watch*] = *; EXCLUDED_SOURCE_FILE_NAMES[sdk=appletv*] = SharedCredentialTests.swift;

Slide 19

Slide 19 text

The Structures #BTF %FCVH 3FMFBTF 5FTUT 'SBNFXPSL

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

ishkawa/APIKit/pull/110

Slide 23

Slide 23 text

dempseyatgithub/BuildSettingExtractor

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

mrackwitz/xcconfigs

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

try! Swift Conference w ʙ w ौ୩ϚʔΫγςΟ w ਓҎ্ͷࠃ಺֎τοϓϨϕϧͷΤϯδχΞʹΑΔߨԋ w ΞϑλʔύʔςΟ w Φʔϓϯιʔεޙॳͷେن໛4XJGUΧϯϑΝϨϯε

Slide 30

Slide 30 text

http://tryswiftconf.com