Upgrade to Pro — share decks privately, control downloads, hide ads and more …

xcconfig pitfalls

Avatar for toshi0383 toshi0383
September 17, 2017

xcconfig pitfalls

presented at iOSDC Japan 2017

Avatar for toshi0383

toshi0383

September 17, 2017
Tweet

More Decks by toshi0383

Other Decks in Programming

Transcript

  1. whoami — ླ໦ ढ़༟ (@toshi0383) Toshihiro Suzuki — iOS/tvOS Dev

    at AbemaTV — Father (5 month) — F1, GT SPORT © Toshihiro Suzuki 2017 2
  2. Agenda — What's xcconfig and Why would you use it?

    — Common Pitfails © Toshihiro Suzuki 2017 4
  3. Why? — Easier to review in Pull requests — Refactor

    using #include — Reusable © Toshihiro Suzuki 2017 8
  4. Recommended way to extract — Extract using toshi0383/xcconfig-extractor — Validate

    using xcodebuild -showBuildSettings © Toshihiro Suzuki 2017 9
  5. Let's Do it ! CONFIGURATION =-configuration Debug WORKSPACE =-workspace iOSSingleViewApp.xcworkspace

    SCHEME =-scheme iOSSingleViewApp OPTIONS=$(CONFIGURATION) $(WORKSPACE) $(SCHEME) xcodebuild -showBuildSettings $(OPTIONS) > before xcconfig-extractor --no-trim-duplicates *.xcodeproj Config/xcconfigs xcodebuild -showBuildSettings $(OPTIONS) > after diff before after © Toshihiro Suzuki 2017 10
  6. $(inherited) is ignored ! — ./Config/xcconfigs/iOSSingleViewApp-Debug.xcconfig FRAMEWORK_SEARCH_PATHS = $(inherited) $

    (PROJECT_DIR)/Carthage/Build/iOS — ./Pods/Target Support Files/Pods-iOSSingleViewApp/ Pods-iOSSingleViewApp.debug.xcconfig FRAMEWORK_SEARCH_PATHS = $(inherited) "$ {PODS_ROOT}/TwitterCore/iOS" "${PODS_ROOT}/ TwitterKit/iOS" © Toshihiro Suzuki 2017 13
  7. Migration failed! — Unwanted FRAMEWORK_SEACH_PATHS diff ! — Failed to

    increment version using agvtool © Toshihiro Suzuki 2017 15
  8. How $(inherited) works? — Inherites from parent LEVEL's value in

    Build Settings — Does NOT work for #include © Toshihiro Suzuki 2017 16
  9. Why agvtool failed to update version? — Answer: agvtool is

    not clever enough — It does NOT search for INFOPLIST_FILE value in xcconfig. © Toshihiro Suzuki 2017 19
  10. Workaround #2 Use /usr/libexec/PlistBuddy instead of agvtool e.g. APP_VERSION=$(git describe

    --tags --abbrev=0) BUILD_VERSION=$BITRISE_BUILD_NUMBER /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${APP_VERSION}" AbemaTV/Info.plist /usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${BUILD_VERSION}" AbemaTV/Info.plist © Toshihiro Suzuki 2017 21
  11. $(inherited) — works btw LEVELs but not for #include INFOPLIST_FILE

    — agvtool compatibility © Toshihiro Suzuki 2017 23
  12. Toshihiro Suzuki Feel free to reach out! Twitter: @toshi0383 GitHub:

    @toshi0383 Qiita: @toshi0383 Email: [email protected] © Toshihiro Suzuki 2017 26