From a8640758300f59617ac544dce72cb3c80a2a520d Mon Sep 17 00:00:00 2001 From: naik-sanju Date: Mon, 4 Sep 2023 11:35:41 +0530 Subject: [PATCH] Add generated header maps and preserve header map paths to build with Bazel This commit adds headermaps so Bazel can find where headers are located, Incase of XBS Xcode does this for us but for Bazel we need to provide headermap. We have setup example project to generate headermaps --- .gitignore | 3 +- Example/.bazeliskrc | 1 + Example/.bazelrc | 18 ++++++++ Example/BUILD.bazel | 22 +++++++++ Example/FLEXample/Supporting Files/Info.plist | 2 +- Example/Gemfile | 1 + Example/Podfile | 10 +++- Example/WORKSPACE | 43 ++++++++++++++++++ FLEX.podspec | 1 + FLEX_private_hmap.hmap | Bin 0 -> 29044 bytes FLEX_public_hmap.hmap | Bin 0 -> 17193 bytes README.md | 9 ++++ 12 files changed, 107 insertions(+), 3 deletions(-) create mode 100644 Example/.bazeliskrc create mode 100644 Example/.bazelrc create mode 100644 Example/BUILD.bazel create mode 100644 Example/Gemfile create mode 100644 Example/WORKSPACE create mode 100755 FLEX_private_hmap.hmap create mode 100755 FLEX_public_hmap.hmap diff --git a/.gitignore b/.gitignore index 4e0b092b1a..576b1b0e00 100644 --- a/.gitignore +++ b/.gitignore @@ -13,11 +13,12 @@ xcuserdata *.xccheckout *.moved-aside DerivedData -*.hmap *.ipa *.xcuserstate .DS_Store /Example/Pods Podfile.lock +/Example/Gemfile.lock +/Example/bazel-* IDEWorkspaceChecks.plist *.xcworkspace diff --git a/Example/.bazeliskrc b/Example/.bazeliskrc new file mode 100644 index 0000000000..b486c8a509 --- /dev/null +++ b/Example/.bazeliskrc @@ -0,0 +1 @@ +USE_BAZEL_VERSION=5.4.1 \ No newline at end of file diff --git a/Example/.bazelrc b/Example/.bazelrc new file mode 100644 index 0000000000..958465a7ab --- /dev/null +++ b/Example/.bazelrc @@ -0,0 +1,18 @@ +build \ + --spawn_strategy=local \ + --worker_sandboxing=false \ + --features=swift.cacheable_swiftmodules \ + --apple_platform_type=ios \ + --verbose_failures \ + --features=swift.use_global_module_cache \ + --strategy=SwiftCompile=worker \ + --experimental_guard_against_concurrent_changes \ + --features=apple.skip_codesign_simulator_bundles \ + --features=apple.arm64_simulator_use_device_deps \ + --features=swift.index_while_building \ + --features=swift.use_global_index_store \ + --modify_execution_info=^(BitcodeSymbolsCopy|BundleApp|BundleTreeApp|DsymDwarf|DsymLipo|GenerateAppleSymbolsFile|ObjcBinarySymbolStrip|CppLink|ObjcLink|ProcessAndSign|SignBinary|SwiftArchive|SwiftStdlibCopy)$=+no-remote,^(BundleResources|ImportedDynamicFrameworkProcessor)$=+no-remote-exec \ + + +build:Debug \ + --compilation_mode=dbg \ \ No newline at end of file diff --git a/Example/BUILD.bazel b/Example/BUILD.bazel new file mode 100644 index 0000000000..68b2bb8db6 --- /dev/null +++ b/Example/BUILD.bazel @@ -0,0 +1,22 @@ +load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application") +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") + + +swift_library( + name = "FLEXExampleSources", + srcs = glob(["FLEXample/App/**/*.swift"]) + ["FLEXample/AppDelegate.swift"], + deps = ["//Pods/FLEX"] +) + +ios_application( + name = "FLEXExample", + bundle_id = "com.flipboard.flex.FLEXample", + families = ["iphone"], + infoplists = ["FLEXample/Supporting Files/Info.plist"], + minimum_os_version = "12.0", + visibility = ["//visibility:public"], + deps = [ + "FLEXExampleSources", + ], + +) \ No newline at end of file diff --git a/Example/FLEXample/Supporting Files/Info.plist b/Example/FLEXample/Supporting Files/Info.plist index d299e079ea..e21bfc78a2 100644 --- a/Example/FLEXample/Supporting Files/Info.plist +++ b/Example/FLEXample/Supporting Files/Info.plist @@ -41,7 +41,7 @@ UISceneConfigurationName Default Configuration UISceneDelegateClassName - $(PRODUCT_MODULE_NAME).SceneDelegate + $(PRODUCT_NAME).SceneDelegate diff --git a/Example/Gemfile b/Example/Gemfile new file mode 100644 index 0000000000..e260061675 --- /dev/null +++ b/Example/Gemfile @@ -0,0 +1 @@ +gem 'cocoapods-bazel' diff --git a/Example/Podfile b/Example/Podfile index d2316497a3..410fff9251 100644 --- a/Example/Podfile +++ b/Example/Podfile @@ -1,6 +1,14 @@ platform :ios, '13.0' +plugin 'cocoapods-bazel', { + rules: { + 'apple_framework' => { load: '@build_bazel_rules_ios//rules:framework.bzl', rule: 'apple_framework' }.freeze, + 'ios_application' => { load: '@build_bazel_rules_ios//rules:app.bzl', rule: 'ios_application' }.freeze, + 'ios_unit_test' => { load: '@build_bazel_rules_ios//rules:test.bzl', rule: 'ios_unit_test' }.freeze + }.freeze, +} + target 'FLEXample' do project 'FLEXample-Cocoapods' - pod 'FLEX', :path => '../' + pod 'FLEX', :git => 'https://github.com/gojekfarm/Flex.git', :branch => 'remove-private-api-usage-and-add-header-maps', :modular_headers => true , :configurations => ['Debug'] end diff --git a/Example/WORKSPACE b/Example/WORKSPACE new file mode 100644 index 0000000000..8743b47798 --- /dev/null +++ b/Example/WORKSPACE @@ -0,0 +1,43 @@ +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") +load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") + +git_repository( + name = "build_bazel_rules_ios", + remote = "https://github.com/bazel-ios/rules_ios.git", + commit = "3884a206840967cee89c4bf16202bd726c118772", +) + +load( + "@build_bazel_rules_ios//rules:repositories.bzl", + "rules_ios_dependencies" +) + +rules_ios_dependencies() + +load( + "@build_bazel_rules_apple//apple:repositories.bzl", + "apple_rules_dependencies", +) + +apple_rules_dependencies() + +load( + "@build_bazel_rules_swift//swift:repositories.bzl", + "swift_rules_dependencies", +) + +swift_rules_dependencies() + +load( + "@build_bazel_rules_swift//swift:extras.bzl", + "swift_rules_extra_dependencies", +) + +swift_rules_extra_dependencies() + +load( + "@build_bazel_apple_support//lib:repositories.bzl", + "apple_support_dependencies", +) + +apple_support_dependencies() diff --git a/FLEX.podspec b/FLEX.podspec index 6ab34cf2df..e9c962ce3c 100644 --- a/FLEX.podspec +++ b/FLEX.podspec @@ -40,6 +40,7 @@ Pod::Spec.new do |spec| spec.xcconfig = { 'CLANG_CXX_LANGUAGE_STANDARD' => 'gnu++11', } + spec.preserve_paths = '*.hmap', spec.compiler_flags = "-Wno-unsupported-availability-guard", "-Wno-deprecated-declarations" spec.public_header_files = [ "Classes/*.h", "Classes/Manager/*.h", "Classes/Toolbar/*.h", "Classes/Core/Controllers/*.h", "Classes/Core/Views/*.h", diff --git a/FLEX_private_hmap.hmap b/FLEX_private_hmap.hmap new file mode 100755 index 0000000000000000000000000000000000000000..a6f55f4b57aa91e2f5eb6f58c5a3473bf0ce35f8 GIT binary patch literal 29044 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 QTcx^5%X-yIb$HwV15UTO#sB~S literal 0 HcmV?d00001 diff --git a/FLEX_public_hmap.hmap b/FLEX_public_hmap.hmap new file mode 100755 index 0000000000000000000000000000000000000000..ad25b448ef6dd11e7658659808e1af9f47751fc4 GIT binary patch literal 17193 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 Lnr!3$Q_%kal{nyV literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 6cff746f58..9035498560 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,15 @@ FLEX (Flipboard Explorer) is a set of in-app debugging and exploration tools for Demo +## How to generate headermaps? +- Headermaps are required to build with Bazel +- To generate a new set of headermaps, cd into Example folder + - Run `pod install` + - Comment out `xcconfig = {"CLANG_CXX_LANGUAGE_STANDARD": "gnu++11"},` this line from Pods/FLEX/BUILD.bazel file + - Run this command `bazel build --config=Debug --ios_multi_cpus=sim_arm64 --xcode_version=14.3.0 --verbose_failures FLEXExample` , right now the build is failing but it generates headermaps. + - Copy these two generated hmap files - `bazel-out/ios-sim_arm64-min9.0-applebin_ios-ios_sim_arm64-dbg-ST-*/bin/Pods/FLEX/FLEX_private_hmap.hmap` and `bazel-out/ios-sim_arm64-min9.0-applebin_ios-ios_sim_arm64-dbg-ST-*/bin/Pods/FLEX/FLEX_public_hmap.hmap` + - Replace the headermap files are root with these copied headermap files. +- Headermap's are binary files, to inspect its content use this tool - https://github.com/milend/hmap ## Give Yourself Debugging Superpowers - Inspect and modify views in the hierarchy. - See the properties and ivars on any object.