├── .gitignore ├── .rspec ├── .rspec_status ├── .rubocop.yml ├── .travis.yml ├── CODE_OF_CONDUCT.md ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── README.md ├── Rakefile ├── bin └── hmapfile ├── cocoapods-hmap.gemspec ├── lib ├── cocoapods_plugin.rb ├── hmap.rb └── hmap │ ├── command.rb │ ├── command │ ├── hmap_gen.rb │ ├── hmap_reader.rb │ └── hmap_writer.rb │ ├── constants.rb │ ├── exceptions.rb │ ├── gem_version.rb │ ├── helper │ ├── executable.rb │ └── utils.rb │ ├── hmap │ ├── hmap_bucketstr.rb │ ├── hmap_reader.rb │ ├── hmap_saver.rb │ ├── hmap_struct.rb │ ├── hmap_writer.rb │ └── mapfile.rb │ ├── user_interface.rb │ └── xc │ ├── context.rb │ ├── header_entry.rb │ ├── header_type.rb │ ├── pbx_helper.rb │ ├── product_helper.rb │ ├── resolver.rb │ ├── target │ ├── build_setting.rb │ ├── target.rb │ ├── target_context.rb │ ├── target_helper.rb │ ├── target_vfs.rb │ ├── xcconfig.rb │ └── xcconfig_helper.rb │ └── workspace │ ├── project.rb │ ├── project_helper.rb │ └── workspace.rb └── spec ├── hmap ├── Resources │ ├── LGApp │ │ ├── HMap │ │ │ └── LGApp.build │ │ │ │ ├── Debug copy-iphoneos │ │ │ │ ├── LGApp-dev.build │ │ │ │ │ ├── LGApp_cat-all-non-framework-target-headers.hmap │ │ │ │ │ ├── LGApp_cat-all-target-headers.hmap │ │ │ │ │ ├── LGApp_cat-own-target-headers.hmap │ │ │ │ │ ├── LGApp_cat-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── LGApp.build │ │ │ │ │ ├── LGApp-all-non-framework-target-headers.hmap │ │ │ │ │ ├── LGApp-all-target-headers.hmap │ │ │ │ │ ├── LGApp-own-target-headers.hmap │ │ │ │ │ ├── LGApp-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ └── TestNoo.build │ │ │ │ │ ├── TestNoo-all-non-framework-target-headers.hmap │ │ │ │ │ ├── TestNoo-all-target-headers.hmap │ │ │ │ │ ├── TestNoo-own-target-headers.hmap │ │ │ │ │ ├── TestNoo-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── Debug copy-iphonesimulator │ │ │ │ ├── LGApp-dev.build │ │ │ │ │ ├── LGApp_cat-all-non-framework-target-headers.hmap │ │ │ │ │ ├── LGApp_cat-all-target-headers.hmap │ │ │ │ │ ├── LGApp_cat-own-target-headers.hmap │ │ │ │ │ ├── LGApp_cat-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── LGApp.build │ │ │ │ │ ├── LGApp-all-non-framework-target-headers.hmap │ │ │ │ │ ├── LGApp-all-target-headers.hmap │ │ │ │ │ ├── LGApp-own-target-headers.hmap │ │ │ │ │ ├── LGApp-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ └── TestNoo.build │ │ │ │ │ ├── TestNoo-all-non-framework-target-headers.hmap │ │ │ │ │ ├── TestNoo-all-target-headers.hmap │ │ │ │ │ ├── TestNoo-own-target-headers.hmap │ │ │ │ │ ├── TestNoo-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── Debug-iphoneos │ │ │ │ ├── LGApp-dev.build │ │ │ │ │ ├── LGApp_cat-all-non-framework-target-headers.hmap │ │ │ │ │ ├── LGApp_cat-all-target-headers.hmap │ │ │ │ │ ├── LGApp_cat-own-target-headers.hmap │ │ │ │ │ ├── LGApp_cat-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── LGApp.build │ │ │ │ │ ├── LGApp-all-non-framework-target-headers.hmap │ │ │ │ │ ├── LGApp-all-target-headers.hmap │ │ │ │ │ ├── LGApp-own-target-headers.hmap │ │ │ │ │ ├── LGApp-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ └── TestNoo.build │ │ │ │ │ ├── TestNoo-all-non-framework-target-headers.hmap │ │ │ │ │ ├── TestNoo-all-target-headers.hmap │ │ │ │ │ ├── TestNoo-own-target-headers.hmap │ │ │ │ │ ├── TestNoo-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── Debug-iphonesimulator │ │ │ │ ├── LGApp-dev.build │ │ │ │ │ ├── LGApp_cat-all-non-framework-target-headers.hmap │ │ │ │ │ ├── LGApp_cat-all-target-headers.hmap │ │ │ │ │ ├── LGApp_cat-own-target-headers.hmap │ │ │ │ │ ├── LGApp_cat-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── LGApp.build │ │ │ │ │ ├── LGApp-all-non-framework-target-headers.hmap │ │ │ │ │ ├── LGApp-all-target-headers.hmap │ │ │ │ │ ├── LGApp-own-target-headers.hmap │ │ │ │ │ ├── LGApp-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ └── TestNoo.build │ │ │ │ │ ├── TestNoo-all-non-framework-target-headers.hmap │ │ │ │ │ ├── TestNoo-all-target-headers.hmap │ │ │ │ │ ├── TestNoo-own-target-headers.hmap │ │ │ │ │ ├── TestNoo-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── Release-iphoneos │ │ │ │ ├── LGApp-dev.build │ │ │ │ │ ├── LGApp_cat-all-non-framework-target-headers.hmap │ │ │ │ │ ├── LGApp_cat-all-target-headers.hmap │ │ │ │ │ ├── LGApp_cat-own-target-headers.hmap │ │ │ │ │ ├── LGApp_cat-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── LGApp.build │ │ │ │ │ ├── LGApp-all-non-framework-target-headers.hmap │ │ │ │ │ ├── LGApp-all-target-headers.hmap │ │ │ │ │ ├── LGApp-own-target-headers.hmap │ │ │ │ │ ├── LGApp-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ └── TestNoo.build │ │ │ │ │ ├── TestNoo-all-non-framework-target-headers.hmap │ │ │ │ │ ├── TestNoo-all-target-headers.hmap │ │ │ │ │ ├── TestNoo-own-target-headers.hmap │ │ │ │ │ ├── TestNoo-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── Release-iphonesimulator │ │ │ │ ├── LGApp-dev.build │ │ │ │ │ ├── LGApp_cat-all-non-framework-target-headers.hmap │ │ │ │ │ ├── LGApp_cat-all-target-headers.hmap │ │ │ │ │ ├── LGApp_cat-own-target-headers.hmap │ │ │ │ │ ├── LGApp_cat-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── LGApp.build │ │ │ │ │ ├── LGApp-all-non-framework-target-headers.hmap │ │ │ │ │ ├── LGApp-all-target-headers.hmap │ │ │ │ │ ├── LGApp-own-target-headers.hmap │ │ │ │ │ ├── LGApp-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ └── TestNoo.build │ │ │ │ │ ├── TestNoo-all-non-framework-target-headers.hmap │ │ │ │ │ ├── TestNoo-all-target-headers.hmap │ │ │ │ │ ├── TestNoo-own-target-headers.hmap │ │ │ │ │ ├── TestNoo-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ └── XCBuildData │ │ │ │ ├── Debug copy-iphoneos │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── Debug copy-iphonesimulator │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── Debug-iphoneos │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── Debug-iphonesimulator │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── Release-iphoneos │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── Release-iphonesimulator │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── all-non-framework-target-headers.hmap │ │ │ │ ├── all-target-headers.hmap │ │ │ │ └── project-headers.hmap │ │ ├── LGApp copy-Info.plist │ │ ├── LGApp.build │ │ │ ├── Debug copy-iphoneos │ │ │ │ ├── LGApp.build │ │ │ │ │ ├── LGApp-all-non-framework-target-headers.hmap │ │ │ │ │ ├── LGApp-all-target-headers.hmap │ │ │ │ │ ├── LGApp-own-target-headers.hmap │ │ │ │ │ ├── LGApp-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ └── TestNoo.build │ │ │ │ │ ├── TestNoo-all-non-framework-target-headers.hmap │ │ │ │ │ ├── TestNoo-all-target-headers.hmap │ │ │ │ │ ├── TestNoo-own-target-headers.hmap │ │ │ │ │ ├── TestNoo-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ ├── Debug copy-iphonesimulator │ │ │ │ ├── LGApp.build │ │ │ │ │ ├── LGApp-all-non-framework-target-headers.hmap │ │ │ │ │ ├── LGApp-all-target-headers.hmap │ │ │ │ │ ├── LGApp-own-target-headers.hmap │ │ │ │ │ ├── LGApp-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ └── TestNoo.build │ │ │ │ │ ├── TestNoo-all-non-framework-target-headers.hmap │ │ │ │ │ ├── TestNoo-all-target-headers.hmap │ │ │ │ │ ├── TestNoo-own-target-headers.hmap │ │ │ │ │ ├── TestNoo-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ ├── Debug-iphoneos │ │ │ │ ├── LGApp.build │ │ │ │ │ ├── LGApp-all-non-framework-target-headers.hmap │ │ │ │ │ ├── LGApp-all-target-headers.hmap │ │ │ │ │ ├── LGApp-own-target-headers.hmap │ │ │ │ │ ├── LGApp-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ └── TestNoo.build │ │ │ │ │ ├── TestNoo-all-non-framework-target-headers.hmap │ │ │ │ │ ├── TestNoo-all-target-headers.hmap │ │ │ │ │ ├── TestNoo-own-target-headers.hmap │ │ │ │ │ ├── TestNoo-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ ├── Debug-iphonesimulator │ │ │ │ ├── LGApp.build │ │ │ │ │ ├── LGApp-all-non-framework-target-headers.hmap │ │ │ │ │ ├── LGApp-all-target-headers.hmap │ │ │ │ │ ├── LGApp-own-target-headers.hmap │ │ │ │ │ ├── LGApp-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ └── TestNoo.build │ │ │ │ │ ├── TestNoo-all-non-framework-target-headers.hmap │ │ │ │ │ ├── TestNoo-all-target-headers.hmap │ │ │ │ │ ├── TestNoo-own-target-headers.hmap │ │ │ │ │ ├── TestNoo-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ ├── Release-iphoneos │ │ │ │ ├── LGApp.build │ │ │ │ │ ├── LGApp-all-non-framework-target-headers.hmap │ │ │ │ │ ├── LGApp-all-target-headers.hmap │ │ │ │ │ ├── LGApp-own-target-headers.hmap │ │ │ │ │ ├── LGApp-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ └── TestNoo.build │ │ │ │ │ ├── TestNoo-all-non-framework-target-headers.hmap │ │ │ │ │ ├── TestNoo-all-target-headers.hmap │ │ │ │ │ ├── TestNoo-own-target-headers.hmap │ │ │ │ │ ├── TestNoo-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ ├── Release-iphonesimulator │ │ │ │ ├── LGApp.build │ │ │ │ │ ├── LGApp-all-non-framework-target-headers.hmap │ │ │ │ │ ├── LGApp-all-target-headers.hmap │ │ │ │ │ ├── LGApp-own-target-headers.hmap │ │ │ │ │ ├── LGApp-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ │ └── TestNoo.build │ │ │ │ │ ├── TestNoo-all-non-framework-target-headers.hmap │ │ │ │ │ ├── TestNoo-all-target-headers.hmap │ │ │ │ │ ├── TestNoo-own-target-headers.hmap │ │ │ │ │ ├── TestNoo-project-headers.hmap │ │ │ │ │ └── all-product-headers.yaml │ │ │ └── XCBuildData │ │ │ │ ├── Debug copy-iphoneos │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── Debug copy-iphonesimulator │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── Debug-iphoneos │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── Debug-iphonesimulator │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── Release-iphoneos │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── Release-iphonesimulator │ │ │ │ └── all-product-headers.yaml │ │ │ │ ├── all-non-framework-target-headers.hmap │ │ │ │ ├── all-target-headers.hmap │ │ │ │ └── project-headers.hmap │ │ ├── LGApp.xcodeproj │ │ │ ├── project.pbxproj │ │ │ └── xcshareddata │ │ │ │ └── xcschemes │ │ │ │ ├── LGApp-Test.xcscheme │ │ │ │ ├── LGApp.xcscheme │ │ │ │ └── TestNoo.xcscheme │ │ ├── LGApp.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ ├── Podfile │ │ ├── Podfile.lock │ │ ├── Source │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets │ │ │ │ ├── AccentColor.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── AppIcon.appiconset │ │ │ │ │ └── Contents.json │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj │ │ │ │ ├── LaunchScreen.storyboard │ │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ ├── LGApp-Bridging-Header.h │ │ │ ├── SceneDelegate.h │ │ │ ├── SceneDelegate.m │ │ │ ├── TestSwift.swift │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ ├── main.m │ │ │ ├── mm │ │ │ │ └── nn │ │ │ │ │ └── Config.xcconfig │ │ │ └── module.modulemap │ │ ├── TestNoo │ │ │ ├── Info.plist │ │ │ ├── NotificationService.h │ │ │ ├── NotificationService.m │ │ │ └── SceneDelegate.h │ │ └── build │ │ │ └── XCBuildData │ │ │ ├── BuildDescriptionCacheIndex-d4a851a3c5da629e163dcd03395e2069 │ │ │ ├── ca67aa9acac08aabe6ac47e649babea0-buildRequest.json │ │ │ ├── ca67aa9acac08aabe6ac47e649babea0-desc.xcbuild │ │ │ ├── ca67aa9acac08aabe6ac47e649babea0-manifest.xcbuild │ │ │ └── ca67aa9acac08aabe6ac47e649babea0-targetGraph.txt │ ├── all-target-headers.hmap │ └── mm.json ├── hmap_reader_spec.rb ├── hmap_writer_spec.rb └── hmapfile_gen_spec.rb └── spec_helper.rb /.gitignore: -------------------------------------------------------------------------------- 1 | # General 2 | *.swp 3 | *.swo 4 | *.rbo 5 | *.gem 6 | .DS_Store 7 | .rbenv-version 8 | .rbx/ 9 | xcuserdata 10 | project.xcworkspace 11 | DerivedData 12 | /concatenated.* 13 | 14 | # Yardoc 15 | .yardoc 16 | /doc 17 | 18 | # Specs 19 | spec/fixtures/banana-lib 20 | spec/fixtures/cache 21 | spec/fixtures/chameleon 22 | spec/fixtures/integration/Headers/ 23 | spec/fixtures/snake 24 | spec/fixtures/vcr 25 | spec/fixtures/spec-repos/Spec_Lock 26 | tmp 27 | spec/hmap/Resources/LGApp/Pods 28 | 29 | 30 | # Examples 31 | examples/**/Podfile.lock 32 | examples/Pods 33 | examples/**/Pods 34 | examples/RelativePathProject/RelativePathProject/RelativePathProject.xcodeproj 35 | coverage/ 36 | .coveralls.yml 37 | 38 | # IDEs 39 | *.xccheckout 40 | .idea/ 41 | 42 | # RVM files 43 | /.rvmrc 44 | /.ruby-version 45 | /.ruby-gemset 46 | 47 | # Bundler files 48 | /.bundle 49 | 50 | # trunk source 51 | spec/fixtures/spec-repos/trunk/**/*.etag 52 | spec/fixtures/spec-repos/trunk/*.yml 53 | .vscode/ -------------------------------------------------------------------------------- /.rspec: -------------------------------------------------------------------------------- 1 | --format documentation 2 | --color 3 | --require spec_helper 4 | -------------------------------------------------------------------------------- /.rspec_status: -------------------------------------------------------------------------------- 1 | example_id | status | run_time | 2 | ------------------------------------- | ------ | --------------- | 3 | ./spec/hmap/hmap_reader_spec.rb[1:1] | passed | 0.01035 seconds | 4 | ./spec/hmap/hmap_writer_spec.rb[1:1] | passed | 0.0167 seconds | 5 | ./spec/hmap/hmapfile_gen_spec.rb[1:1] | passed | 0.3212 seconds | 6 | ./spec/hmap/hmapfile_gen_spec.rb[1:2] | passed | 10.65 seconds | 7 | -------------------------------------------------------------------------------- /.rubocop.yml: -------------------------------------------------------------------------------- 1 | AllCops: 2 | TargetRubyVersion: 2.6.0 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | --- 2 | language: ruby 3 | cache: bundler 4 | rvm: 5 | - 2.7.3 6 | before_install: gem install bundler -v 2.1.4 7 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, gender identity and expression, level of experience, 9 | nationality, personal appearance, race, religion, or sexual identity and 10 | orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at cat1237@logic.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at [https://contributor-covenant.org/version/1/4][version] 72 | 73 | [homepage]: https://contributor-covenant.org 74 | [version]: https://contributor-covenant.org/version/1/4/ 75 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | 2 | source 'https://rubygems.org' 3 | 4 | 5 | # Specify your gem's dependencies in cocoapods-hmap.gemspec 6 | gemspec 7 | 8 | group :development do 9 | gem 'claide' 10 | gem 'xcodeproj' 11 | gem 'yaml-vfs', '>= 0.0.4' 12 | gem 'hashtable', '>= 0.1.2' 13 | end 14 | 15 | group :debugging do 16 | gem 'debase' 17 | gem 'ruby-debug-ide' 18 | end 19 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | PATH 2 | remote: . 3 | specs: 4 | cocoapods-mapfile (0.2.7.2) 5 | claide (>= 1.0.2, < 2.0) 6 | hashtable (>= 0.0.3) 7 | xcodeproj (>= 1.19.0, < 2.0) 8 | yaml-vfs (>= 0.0.4) 9 | 10 | GEM 11 | remote: https://rubygems.org/ 12 | specs: 13 | CFPropertyList (3.0.5) 14 | rexml 15 | atomos (0.1.3) 16 | claide (1.1.0) 17 | colored2 (3.1.2) 18 | coveralls (0.8.23) 19 | json (>= 1.8, < 3) 20 | simplecov (~> 0.16.1) 21 | term-ansicolor (~> 1.3) 22 | thor (>= 0.19.4, < 2.0) 23 | tins (~> 1.6) 24 | debase (0.2.4.1) 25 | debase-ruby_core_source (>= 0.10.2) 26 | debase-ruby_core_source (0.10.16) 27 | diff-lcs (1.5.0) 28 | docile (1.4.0) 29 | hashtable (0.1.4) 30 | json (2.6.2) 31 | nanaimo (0.3.0) 32 | rake (13.0.6) 33 | rexml (3.2.5) 34 | rspec (3.11.0) 35 | rspec-core (~> 3.11.0) 36 | rspec-expectations (~> 3.11.0) 37 | rspec-mocks (~> 3.11.0) 38 | rspec-core (3.11.0) 39 | rspec-support (~> 3.11.0) 40 | rspec-expectations (3.11.0) 41 | diff-lcs (>= 1.2.0, < 2.0) 42 | rspec-support (~> 3.11.0) 43 | rspec-mocks (3.11.1) 44 | diff-lcs (>= 1.2.0, < 2.0) 45 | rspec-support (~> 3.11.0) 46 | rspec-support (3.11.0) 47 | ruby-debug-ide (0.7.3) 48 | rake (>= 0.8.1) 49 | simplecov (0.16.1) 50 | docile (~> 1.1) 51 | json (>= 1.8, < 3) 52 | simplecov-html (~> 0.10.0) 53 | simplecov-html (0.10.2) 54 | sync (0.5.0) 55 | term-ansicolor (1.7.1) 56 | tins (~> 1.0) 57 | thor (1.2.1) 58 | tins (1.31.1) 59 | sync 60 | xcodeproj (1.21.0) 61 | CFPropertyList (>= 2.3.3, < 4.0) 62 | atomos (~> 0.1.3) 63 | claide (>= 1.0.2, < 2.0) 64 | colored2 (~> 3.1) 65 | nanaimo (~> 0.3.0) 66 | rexml (~> 3.2.4) 67 | yaml-vfs (0.0.5) 68 | claide (>= 1.0.2, < 2.0) 69 | colored2 (~> 3.1) 70 | 71 | PLATFORMS 72 | ruby 73 | 74 | DEPENDENCIES 75 | bundler (>= 2.1) 76 | claide 77 | cocoapods-mapfile! 78 | coveralls 79 | debase 80 | hashtable (>= 0.1.2) 81 | rake (>= 10.0) 82 | rspec (>= 3.0) 83 | ruby-debug-ide 84 | xcodeproj 85 | yaml-vfs (>= 0.0.4) 86 | 87 | BUNDLED WITH 88 | 2.1.4 89 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2021 Cat1237 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # hmapfile 2 | 3 | [![License MIT](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/main/LICENSE)  4 | 5 | A CocoaPods plugin which can gen/read header map file. 6 | 7 | **hmap-gen** is able to scan the header files of the target referenced components in the specified Cocoapods project, and generates a header map file that public to all the components 8 | as well as generates a public and private header map file for each referenced component. 9 | 10 | - `` : `-I` 11 | - `"header.h"` : `-iquote ` 12 | 13 | For framework, use [yaml-vfs](https://github.com/Cat1237/yaml-vfs) create VFS file to map framework Headers and Modules dir and pass VFS file to `-ivfsoverlay` parameter. 14 | 15 | - `vfs` : `-ivfsoverlay ` 16 | 17 | A hmap file includes four types of headers: 18 | 19 | - `"header.h"` 20 | - `` **based on project** 21 | - `` **based on project** 22 | - `<*\*/**/header.h>` **based on project** 23 | - `"*\*/**/header.h"` **based on project** 24 | - `"module/header.h"` **based on project** 25 | 26 | For hmapfile hashtbale, use [hashtbale](https://github.com/Cat1237/hashtable) create hashtable and bitmap to store headers. 27 | 28 | ## Installation 29 | 30 | Add this line to your application's Gemfile: 31 | 32 | ```ruby 33 | gem 'cocoapods-mapfile' 34 | ``` 35 | 36 | And then execute: 37 | 38 | ```shell 39 | # bundle install 40 | $ bundle install 41 | ``` 42 | 43 | Or install it yourself as: 44 | 45 | ```shell 46 | # gem install 47 | $ gem install cocoapods-mapfile 48 | ``` 49 | 50 | ## Quickstart 51 | 52 | To begin gen hmap file by opening an Xcodeproj dir, and to your command line with: 53 | 54 | ```shell 55 | hmapfile gen 56 | ``` 57 | 58 | or to your podfile, add this line: 59 | 60 | ```rb 61 | plugin 'cocoapods-mapfile' 62 | ``` 63 | 64 | ## Command Line Tool 65 | 66 | Installing the `cocoapods-mapfile` gem will also install two command-line tool `hmapfile reader` and `hmapfile writer` which you can use to generate header map file and read hmap file. 67 | 68 | For more information consult 69 | 70 | - `hmapfile --help` 71 | - `hmapfile gen --help` 72 | - `hmapfile reader --help` 73 | - `hmapfile writer --help` 74 | 75 | ### Usage 76 | 77 | ```shell 78 | 79 | # Read or write header map file. 80 | $ hmapfile COMMAND 81 | 82 | ``` 83 | 84 | #### Commands 85 | 86 | 1. `hmapfile gen`: 87 | 88 | - `--project-directory=/porject/dir`: Read .xcworkspace/.xcodeproj file to gen hmap files. 89 | - `--clean-hmap`: Clean up hmap file settings. 90 | 91 | 2. `hmapfile reader`: 92 | - `--hmap-path=/hmap/dir/file`: Read this path of the hmap file. 93 | 94 | 3. `hmapfile writer`: 95 | - `--json-path=/project/dir/json`: The path to the hmap json data. 96 | - `--output-path=/project/dir/hmap file`: The path json data to the hmap file. 97 | 98 | **hmapfile writer json file:** 99 | 100 | ```json 101 | { 102 | "MM.h": [ 103 | "/Users/ws/Desktop/TestAndTestApp/TestAndTestApp/", 104 | "MM.h" 105 | ], 106 | "Dog.h": [ 107 | "/Users/ws/Desktop/TestAndTestApp/TestAndTestApp/", 108 | "MM.h" 109 | ], 110 | "Cat.h": [ 111 | "/Users/ws/Desktop/TestAndTestApp/TestAndTestApp/", 112 | "MM.h" 113 | ], 114 | "TestAndTestApp/MM.h": [ 115 | "/Users/ws/Desktop/TestAndTestApp/TestAndTestApp/", 116 | "MM.h" 117 | ], 118 | "TestAndTestApp/Dog.h": [ 119 | "/Users/ws/Desktop/TestAndTestApp/TestAndTestApp/", 120 | "Dog.h" 121 | ] 122 | } 123 | ``` 124 | 125 | example: 126 | 127 | ```shell 128 | # Read current dir .xcworkspace/.xcodeproj file to Gen hmap files. 129 | $ hmapfile gen 130 | 131 | # Read the specified directory .xcworkspace/.xcodeproj file to Gen hmap files. 132 | $ hmapfile gen --project-directory= 133 | 134 | # Clean up hmap file settings. 135 | $ hmapfile gen --clean-hmap 136 | $ hmapfile gen --project-directory= --clean-hmap 137 | 138 | $ hmapfile writer --json-path=../cat.json --output-path=../cat.hmap 139 | 140 | $ hmapfile reader --hmap-path=../cat.hmap 141 | ``` 142 | 143 | ## For Cocoapods 144 | 145 | Add this line in your podfile: 146 | 147 | ```rb 148 | plugin 'cocoapods-mapfile' 149 | ``` 150 | 151 | This was equl: 152 | 153 | ```rb 154 | hmapfile gen --project-directory= 155 | ``` 156 | 157 | or, you can set some value: 158 | 159 | Every time you execute pod install or pod update, `cocoapods-mapfile` will automatically generate a `header map file` for you and modify: 160 | 161 | - `OTHER_CPLUSPLUSFLAGS` 162 | - `OTHER_CFLAGS` 163 | - `USE_HEADERMAP` 164 | - `USER_HEADER_SEARCH_PATHS` 165 | - `HEAD_SEARCH_PATHS` 166 | 167 | ## TODO 168 | 169 | - File generation speed 170 | - Perfect interface 171 | - Optimize the code 172 | 173 | ## Contributing 174 | 175 | Bug reports and pull requests are welcome on GitHub at [cocoapods-hmap](https://github.com/Cat1237/cocoapods-hmap). This project is intended to be a safe, welcoming space for collaboration. 176 | 177 | ## License 178 | 179 | The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT). 180 | 181 | ## Code of Conduct 182 | 183 | Everyone interacting in the Cocoapods::Hmap project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/cocoapods-hmap/blob/master/CODE_OF_CONDUCT.md). 184 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | require "bundler/gem_tasks" 2 | require "rspec/core/rake_task" 3 | 4 | RSpec::Core::RakeTask.new(:spec) 5 | 6 | task :default => :spec 7 | -------------------------------------------------------------------------------- /bin/hmapfile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # frozen_string_literal: true 3 | 4 | if $PROGRAM_NAME == __FILE__ 5 | ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', __dir__) 6 | require 'bundler/setup' 7 | end 8 | 9 | require 'hmap' 10 | 11 | HMap::Command.run(ARGV) 12 | -------------------------------------------------------------------------------- /cocoapods-hmap.gemspec: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require File.expand_path('../lib/hmap/gem_version', __FILE__) 4 | 5 | # require "#{File.dirname(__FILE__)}/lib/hmap" 6 | 7 | Gem::Specification.new do |spec| 8 | spec.name = 'cocoapods-mapfile' 9 | spec.version = HMap::VERSION 10 | spec.authors = ['Cat1237'] 11 | spec.email = ['wangson1237@outlook.com'] 12 | 13 | spec.summary = 'Read or write header map file.' 14 | spec.description = %( 15 | header_reader lets your read Xcode header map file. 16 | header-writer lets your analyze the project pod dependencies and gen header map file for all pods. 17 | ).strip.gsub(/\s+/, ' ') 18 | spec.homepage = 'https://github.com/Cat1237/cocoapods-hmap.git' 19 | spec.license = 'MIT' 20 | spec.files = %w[README.md LICENSE bin/hmapfile] + Dir['lib/**/*.rb'] 21 | spec.executables = %w[hmapfile] 22 | spec.require_paths = ['lib'] 23 | 24 | spec.add_development_dependency 'bundler', '>= 2.1' 25 | spec.add_development_dependency 'coveralls', '>= 0' 26 | spec.add_development_dependency 'rake', '>= 10.0' 27 | spec.add_development_dependency 'rspec', '>= 3.0' 28 | 29 | spec.add_runtime_dependency 'claide', '>= 1.0.2', '< 2.0' 30 | spec.add_runtime_dependency 'xcodeproj', '>= 1.19.0', '< 2.0' 31 | spec.add_runtime_dependency 'yaml-vfs', '>= 0.0.4' 32 | spec.add_runtime_dependency 'hashtable', '>= 0.0.3' 33 | 34 | spec.required_ruby_version = '>= 2.6' 35 | end 36 | -------------------------------------------------------------------------------- /lib/cocoapods_plugin.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'hmap' 4 | 5 | module Pod 6 | # hook 7 | @HooksManager = HooksManager 8 | @HooksManager.register('cocoapods-mapfile', :post_install) do |_, _options| 9 | args = ['gen', "--project-directory=#{Config.instance.installation_root}"] 10 | # allow_targets = options['allow_targets'] 11 | # unless allow_targets.nil? 12 | # if allow_targets.is_a?(Array) 13 | # args << "--allow-targets=#{allow_targets.join(', ')}" unless allow_targets.empty? 14 | # else 15 | # print 'waring:'.yellow, \ 16 | # 'plugin cocoapods-mapfile args allow_targets must be a array, like ## allow_targets: [target1, targte2] ##' 17 | # end 18 | # end 19 | # save_origin = options['save_oripodgin'].nil? ? true : options['save_origin'] 20 | # use_origin_headermap = options['use_origin_headermap'].nil? ? true : options['use_origin_headermap'] 21 | # args << '--fno-save-origin' unless save_origin 22 | # args << '--fno-use-origin-headermap' unless use_origin_headermap 23 | HMap::Command.run(args) 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /lib/hmap.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'xcodeproj' 4 | 5 | # The primary namespace for cocoapods-hmap. 6 | module HMap 7 | require 'pathname' 8 | require 'claide' 9 | 10 | require 'hmap/gem_version' 11 | require_relative 'hmap/user_interface' 12 | 13 | # autoload registers a file path to be loaded the first time 14 | # that a specified module or class is accessed in the namespace of the calling module or class. 15 | autoload :Command, 'hmap/command' 16 | autoload :Utils, 'hmap/helper/utils' 17 | autoload :Constants, 'hmap/constants' 18 | autoload :BucketStr, 'hmap/hmap/hmap_bucketstr' 19 | autoload :HMapSaver, 'hmap/hmap/hmap_saver' 20 | autoload :MapFileWriter, 'hmap/hmap/hmap_writer' 21 | autoload :MapFileReader, 'hmap/hmap/hmap_reader' 22 | 23 | # autoload :Struct, 'hmap/hmap/hmap_struct' 24 | end 25 | -------------------------------------------------------------------------------- /lib/hmap/command.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # The primary namespace for VFS. 4 | module HMap 5 | require 'colored2' 6 | require 'claide' 7 | # The primary Command for VFS. 8 | class Command < CLAide::Command 9 | require 'hmap/command/hmap_writer' 10 | require 'hmap/command/hmap_reader' 11 | require 'hmap/command/hmap_gen' 12 | 13 | 14 | self.abstract_command = false 15 | self.command = 'hmapfile' 16 | self.version = VERSION 17 | self.description = 'Read or write header map file.' 18 | self.plugin_prefixes = %w[claide writer reader gen] 19 | 20 | def initialize(argv) 21 | super 22 | return if ansi_output? 23 | 24 | Colored2.disable! 25 | String.send(:define_method, :colorize) { |string, _| string } 26 | end 27 | end 28 | end 29 | -------------------------------------------------------------------------------- /lib/hmap/command/hmap_gen.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module HMap 4 | class Command 5 | # hmap file gen cmd 6 | class Gen < Command 7 | # summary 8 | self.summary = 'Analyzes the dependencies and gen each dependencie hmap file.' 9 | 10 | self.description = <<-DESC 11 | Analyzes the dependencies of any projects and gen each dependencie hmap file. 12 | DESC 13 | 14 | self.arguments = [ 15 | CLAide::Argument.new('--project-directory', false), 16 | CLAide::Argument.new('--clean-hmap', false) 17 | ] 18 | 19 | def initialize(argv) 20 | super 21 | project_directory = argv.option('project-directory') 22 | @clean_hmap = argv.flag?('clean-hmap', false) 23 | project_directory = Dir.pwd if project_directory.nil? 24 | @project_directory = Pathname.new(project_directory).expand_path 25 | end 26 | 27 | def validate! 28 | super 29 | if @project_directory.nil? 30 | help! 'error: no input project directory which to use with the `--project-directory` option.' 31 | end 32 | end 33 | 34 | # help 35 | def self.options 36 | [ 37 | ['--project-directory=/project/dir/', 'The path to the root of the project directory'], 38 | ['--clean-hmap', 'This option will clean up all hmap-gen setup for hmap.'] 39 | ].concat(super) 40 | end 41 | 42 | def run 43 | name = 'Gen' 44 | name = 'Clean' if @clean_hmap 45 | UserInterface.puts("\n[hmapfile] #{name} start") 46 | unless @project_directory.exist? 47 | UserInterface.puts("\n[hmapfile] #{name} [ERROR] #{@project_directory} dir not exist!".red) 48 | return 49 | end 50 | HMap::MapFileWriter.new(true, @project_directory, @clean_hmap) 51 | UserInterface.puts("[hmapfile] #{name} finish") 52 | end 53 | end 54 | end 55 | end 56 | -------------------------------------------------------------------------------- /lib/hmap/command/hmap_reader.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: false 2 | 3 | module HMap 4 | class Command 5 | # hmap file reader cmd 6 | class Reader < Command 7 | self.summary = 'Read mapfile and puts result.' 8 | 9 | self.description = <<-DESC 10 | Read mapfile and puts result, header, buckets, string_table. 11 | DESC 12 | 13 | self.arguments = [ 14 | # framework_p, r_header, r_m 15 | CLAide::Argument.new('--hmap-path', true) 16 | ] 17 | 18 | def initialize(argv) 19 | super 20 | mapfile_path = argv.option('hmap-path') || '' 21 | @mapfile_path = Pathname.new(mapfile_path).expand_path 22 | end 23 | 24 | def validate! 25 | super 26 | # banner! if help? 27 | raise "[hmapfile] Reader [ERROR]: --hmap-path #{@mapfile_path} no exist".red if @mapfile_path.nil? 28 | end 29 | 30 | def self.options 31 | [ 32 | ['--hmap-path=/hmap/dir/file', 'The path of the hmap file'] 33 | ].concat(super) 34 | end 35 | 36 | def run 37 | UserInterface.puts "\n[hmapfile] Reader start\n" 38 | if File.exist?(@mapfile_path) 39 | HMap::MapFileReader.new(@mapfile_path) 40 | else 41 | UserInterface.puts "\n[hmapfile] Reader input path: #{@mapfile_path} no such file!\n".red 42 | end 43 | UserInterface.puts "\n[hmapfile] Reader finish\n" 44 | end 45 | end 46 | end 47 | end 48 | -------------------------------------------------------------------------------- /lib/hmap/command/hmap_writer.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module HMap 4 | class Command 5 | # hmap file gen cmd 6 | class Writer < Command 7 | # summary 8 | self.summary = 'Analyzes the input json and gen each dependencie mapfile.' 9 | 10 | self.description = <<-DESC 11 | Analyzes the input json and gen each dependencie mapfile. 12 | DESC 13 | 14 | self.arguments = [ 15 | # framework_p, r_header, r_m 16 | CLAide::Argument.new('--json-path', true), 17 | CLAide::Argument.new('--output-path', false) 18 | ] 19 | 20 | def initialize(argv) 21 | super 22 | @json_path = argv.option('json-path') || '' 23 | output_path = argv.option('output-path') 24 | @output_path = output_path.nil? ? Pathname('.') : Pathname(output_path) 25 | end 26 | 27 | def validate! 28 | super 29 | help! 'error: no input json files which to use with the `--json-path` option.' if @json_path.nil? 30 | help! 'error: no output path which to use the `--output-path`' if @output_path.nil? 31 | end 32 | 33 | # help 34 | def self.options 35 | [ 36 | ['--json-path=/project/dir/json', 'The path to the hmap json data.'], 37 | ['--output-path=/project/dir/hmap file', 'The path json data to the hmap file.'] 38 | ].concat(super) 39 | end 40 | 41 | def run 42 | UserInterface.puts "\n[hmapfile-from-json] start" 43 | if File.exist?(@json_path) 44 | require 'json' 45 | json_file = File.read(@json_path) 46 | json = JSON.parse(json_file) 47 | path = @output_path 48 | path = path.join("#{File.basename(@json_path, '.*')}.hmap") if path.directory? 49 | HMapSaver.new_from_buckets(json).write_to(path) 50 | UserInterface.puts "[hmapfile-from-json] output path #{path}".green 51 | else 52 | unless File.exist?(@json_path) 53 | UserInterface.puts "\n[hmapfile-from-json] Error json path: #{@json_path} no such file!".red 54 | end 55 | unless File.exist?(@output_path) 56 | UserInterface.puts "\n[hmapfile-from-json] Error output path: #{@output_path} no such file!".red 57 | end 58 | end 59 | UserInterface.puts "\n[hmapfile-from-json] finish" 60 | rescue Object => exception 61 | UserInterface.puts "#{exception}".red 62 | end 63 | end 64 | end 65 | end 66 | -------------------------------------------------------------------------------- /lib/hmap/constants.rb: -------------------------------------------------------------------------------- 1 | module HMap 2 | # This modules groups all the constants known to HMap. 3 | # 4 | class Constants 5 | BUILD_DIR = 'BUILD_DIR' 6 | BUILD_DIR_KEY = '${BUILD_DIR}' 7 | OBJROOT = 'OBJROOT' 8 | SRCROOT = '${SRCROOT}' 9 | HMAP_DIR = 'HMap' 10 | HMAP_GEN_DIR = 'HMAP_GEN_DIR' 11 | HMAP_GEN_DIR_VALUE = '${HMAP_GEN_DIR}' 12 | XC_BUILD_DATA = 'XCBuildData' 13 | PROJECT_TEMP_DIR = '${PROJECT}.build' 14 | TARGET_TEMP_DIR = '${TARGET_NAME}.build' 15 | TARGET_NAME = '${TARGET_NAME}' 16 | PRODUCT_NAME = 'PRODUCT_NAME' 17 | PRODUCT_NAME_VALUE = '${PRODUCT_NAME}' 18 | CONFIGURATION_EFFECTIVE_PLATFORM = '$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)' 19 | USE_HEADERMAP = 'USE_HEADERMAP' 20 | USER_HEADER_SEARCH_PATHS = 'USER_HEADER_SEARCH_PATHS' 21 | HEADER_SEARCH_PATHS = 'HEADER_SEARCH_PATHS' 22 | HMAP_HEADER_SETTING = 'HMAP_HEADER_SETTING' 23 | HMAP_HEADER_SETTING_KEY = '${HMAP_HEADER_SETTING}' 24 | 25 | OTHER_CFLAGS = 'OTHER_CFLAGS' 26 | OTHER_CPLUSPLUSFLAGS = 'OTHER_CPLUSPLUSFLAGS' 27 | CONFIGURATION_BUILD_DIR = 'CONFIGURATION_BUILD_DIR' 28 | OTHER_SWIFT_FLAGS = 'OTHER_SWIFT_FLAGS' 29 | 30 | XCBuildConfiguration = Xcodeproj::Project::Object::XCBuildConfiguration 31 | PBXSourcesBuildPhase = Xcodeproj::Project::Object::PBXSourcesBuildPhase 32 | PBXHeadersBuildPhase = Xcodeproj::Project::Object::PBXHeadersBuildPhase 33 | PBXGroup = Xcodeproj::Project::Object::PBXGroup 34 | PBXFileReference = Xcodeproj::Project::Object::PBXFileReference 35 | PBXBuildFile = Xcodeproj::Project::Object::PBXBuildFile 36 | PBXAggregateTarget = Xcodeproj::Project::Object::PBXAggregateTarget 37 | 38 | # HMAP_TARGET_ROOT = [BUILD_DIR_KEY, '..', '..', HMAP_DIR, 39 | # PROJECT_TEMP_DIR, CONFIGURATION_EFFECTIVE_PLATFORM, 40 | # TARGET_TEMP_DIR].join('/') 41 | HMAP_TARGET_ROOT = [SRCROOT, HMAP_DIR, 42 | PROJECT_TEMP_DIR, CONFIGURATION_EFFECTIVE_PLATFORM, 43 | TARGET_TEMP_DIR].join('/') 44 | 45 | HMAP_GEN_DIR_ATTRIBUTE = { HMAP_GEN_DIR => HMAP_TARGET_ROOT } 46 | 47 | HMAP_FILE_TYPE = %i[own_target_headers all_non_framework_target_headers all_target_headers all_product_headers 48 | project_headers workspace_headers] 49 | 50 | def self.instance 51 | @instance ||= new 52 | end 53 | 54 | # Sets the current config instance. If set to nil the config will be 55 | # recreated when needed. 56 | # 57 | # @param [Config, Nil] the instance. 58 | # 59 | # @return [void] 60 | # 61 | class << self 62 | attr_writer :instance 63 | end 64 | 65 | def initialize 66 | @build_as_framework = {} 67 | end 68 | 69 | def hmap_filename(type) 70 | filenames[type] 71 | end 72 | 73 | def full_hmap_filename(type, product_name = nil) 74 | name = hmap_filename(type) 75 | name = "#{product_name}-#{name}" if type != :all_product_headers && !product_name.nil? 76 | name 77 | end 78 | 79 | def full_hmap_filepath(type, path, dir = nil, product_name = nil) 80 | name = full_hmap_filename(type, product_name) unless path.end_with?(hmap_filename(type)) 81 | path = Pathname.new(path) 82 | path = path.join(dir) unless dir.nil? 83 | path = path.join(name) unless name.nil? 84 | path 85 | end 86 | 87 | def hmap_build_setting_key(type) 88 | build_setting_keys(type) 89 | end 90 | 91 | def hmap_build_setting_values 92 | ss = build_setting_values.values.join(' ') 93 | ['$(inherited)', ss].join(' ') 94 | end 95 | 96 | def hmap_build_setting_value(type) 97 | build_setting_values[type] 98 | end 99 | 100 | def hmap_xc_filename(type) 101 | xc_filenames[type] 102 | end 103 | 104 | def hmap_build_settings 105 | build_settings 106 | end 107 | 108 | private 109 | 110 | def build_settings 111 | return @build_settings if defined? @build_settings 112 | 113 | attributes = HMAP_GEN_DIR_ATTRIBUTE 114 | attributes[HEADER_SEARCH_PATHS] = build_setting_values_i 115 | attributes[OTHER_CFLAGS] = build_setting_values_c 116 | attributes[OTHER_CPLUSPLUSFLAGS] = build_setting_values_c 117 | attributes[OTHER_SWIFT_FLAGS] = build_setting_values_s 118 | # attributes[USER_HEADER_SEARCH_PATHS] = build_setting_values_iquote 119 | attributes[USE_HEADERMAP] = 'NO' 120 | @build_settings = attributes 121 | end 122 | 123 | def filenames 124 | return @filenames if defined? @filenames 125 | 126 | @filenames = Hash[HMAP_FILE_TYPE.map do |type| 127 | t_type = type 128 | t_type = :all_target_headers if type == :workspace_headers 129 | name = t_type.to_s.gsub(/_/, '-') 130 | extname = '.hmap' 131 | extname = '.yaml' if type == :all_product_headers 132 | [type, name + extname] 133 | end] 134 | end 135 | 136 | def build_setting_values_s 137 | %i[all_non_framework_target_headers own_target_headers all_product_headers project_headers].map do |type| 138 | key = build_setting_keys[type] 139 | value = xc_filenames[type] 140 | if key == :I 141 | "-Xcc -#{key}\"#{HMAP_GEN_DIR_VALUE}/#{value}\"" 142 | else 143 | "-Xcc -#{key} -Xcc \"#{HMAP_GEN_DIR_VALUE}/#{value}\"" 144 | end 145 | end.join(' ') 146 | end 147 | 148 | def build_setting_values_i 149 | %i[all_non_framework_target_headers own_target_headers project_headers].map do |type| 150 | value = xc_filenames[type] 151 | "\"#{HMAP_GEN_DIR_VALUE}/#{value}\"" 152 | end.join(' ') 153 | end 154 | 155 | def build_setting_values_iquote 156 | %i[project_headers].map do |type| 157 | value = xc_filenames[type] 158 | "\"#{HMAP_GEN_DIR_VALUE}/#{value}\"" 159 | end.join(' ') 160 | end 161 | 162 | def build_setting_values_c 163 | %i[all_product_headers].map do |type| 164 | key = build_setting_keys[type] 165 | value = xc_filenames[type] 166 | blank = ' ' unless key == :I 167 | ["-#{key}", "\"#{HMAP_GEN_DIR_VALUE}/#{value}\""].join(blank || '') 168 | end.join(' ') 169 | end 170 | 171 | def build_setting_keys 172 | return @build_setting_keys if defined? @build_setting_keys 173 | 174 | @build_setting_keys = 175 | Hash[HMAP_FILE_TYPE.map do |type| 176 | [type, case type 177 | when :workspace_headers, :project_headers then :iquote 178 | when :all_product_headers then :ivfsoverlay 179 | else 180 | :I 181 | end] 182 | end] 183 | end 184 | 185 | def build_setting_values 186 | return @build_setting_values if defined? @build_setting_values 187 | 188 | @build_setting_values = 189 | Hash[HMAP_FILE_TYPE.map do |type| 190 | key = build_setting_keys[type] 191 | value = xc_filenames[type] 192 | blank = ' ' unless key == :I 193 | [type, ["-#{key}", "\"#{HMAP_GEN_DIR_VALUE}/#{value}\""].join(blank || '')] 194 | end] 195 | end 196 | 197 | def xc_filenames 198 | return @xc_filenames if defined? @xc_filenames 199 | 200 | @xc_filenames = 201 | Hash[HMAP_FILE_TYPE.map do |type| 202 | file_name = filenames[type] 203 | [type, case type 204 | when :all_product_headers then file_name 205 | else 206 | # file_name.to_s 207 | "#{Constants::PRODUCT_NAME_VALUE}-#{file_name}" 208 | end] 209 | end] 210 | end 211 | end 212 | end 213 | -------------------------------------------------------------------------------- /lib/hmap/exceptions.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module HMap 4 | # A generic HMap error in execution. 5 | class HMapError < RuntimeError 6 | end 7 | 8 | # Raised when a file is not a HMap. 9 | class NotAHMapOError < HMapError 10 | end 11 | 12 | # Raised when a file is too short to be a valid HMap file. 13 | class TruncatedFileError < NotAHMapOError 14 | def initialize 15 | super 'File is too short to be a valid HMap' 16 | end 17 | end 18 | 19 | # Raised when a file's magic bytes are not valid HMap magic. 20 | class MagicError < NotAHMapOError 21 | # @param num [Integer] the unknown number 22 | def initialize(magic) 23 | super format('Unrecognized HMap magic: 0x%02x', magic: magic) 24 | end 25 | end 26 | 27 | # Raised when a class is not the class of obj. 28 | class ClassIncludedError < HMapError 29 | def initialize(cls1, cls2) 30 | super format('%s must be the %s of obj', cls1: cls1, cls2: cls2) 31 | end 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /lib/hmap/gem_version.rb: -------------------------------------------------------------------------------- 1 | module HMap 2 | # The version of the hmapfile command line tool. 3 | # 4 | VERSION = '0.2.7.2'.freeze unless defined? HMap::VERSION 5 | end 6 | -------------------------------------------------------------------------------- /lib/hmap/helper/executable.rb: -------------------------------------------------------------------------------- 1 | module HMap 2 | module Executable 3 | # Creates the methods for the executable with the given name. 4 | # 5 | # @param [Symbol] name 6 | # the name of the executable. 7 | # 8 | # @return [void] 9 | # 10 | def executable(name) 11 | define_method(name) do |*command| 12 | Executable.execute_command(name, Array(command).flatten, false) 13 | end 14 | 15 | define_method(name.to_s + '!') do |*command| 16 | Executable.execute_command(name, Array(command).flatten, true) 17 | end 18 | end 19 | 20 | # Executes the given command displaying it if in verbose mode. 21 | # 22 | # @param [String] executable 23 | # The binary to use. 24 | # 25 | # @param [Array<#to_s>] command 26 | # The command to send to the binary. 27 | # 28 | # @param [Bool] raise_on_failure 29 | # Whether it should raise if the command fails. 30 | # 31 | # @raise If the executable could not be located. 32 | # 33 | # @raise If the command fails and the `raise_on_failure` is set to true. 34 | # 35 | # @return [String] the output of the command (STDOUT and STDERR). 36 | # 37 | def self.execute_command(executable, command, raise_on_failure = true) 38 | bin = which!(executable) 39 | 40 | command = command.map(&:to_s) 41 | if File.basename(bin) == 'tar.exe' 42 | # Tar on Windows needs --force-local 43 | command.push('--force-local') 44 | end 45 | full_command = "#{bin} #{command.join(' ')}" 46 | 47 | if Resolver.instance.verbose? 48 | p("$ #{full_command}") 49 | stdout = Indenter.new($stdout) 50 | stderr = Indenter.new($stderr) 51 | else 52 | stdout = Indenter.new 53 | stderr = Indenter.new 54 | end 55 | 56 | status = popen3(bin, command, stdout, stderr) 57 | stdout = stdout.join 58 | stderr = stderr.join 59 | output = stdout + stderr 60 | unless status.success? 61 | if raise_on_failure 62 | raise Informative, "#{full_command}\n\n#{output}" 63 | else 64 | p("[!] Failed: #{full_command}".red) 65 | end 66 | end 67 | stdout 68 | end 69 | 70 | # Returns the absolute path to the binary with the given name on the current 71 | # `PATH`, or `nil` if none is found. 72 | # 73 | # @param [String] program 74 | # The name of the program being searched for. 75 | # 76 | # @return [String,Nil] The absolute path to the given program, or `nil` if 77 | # it wasn't found in the current `PATH`. 78 | # 79 | def self.which(program) 80 | program = program.to_s 81 | paths = ENV.fetch('PATH') { '' }.split(File::PATH_SEPARATOR) 82 | paths.unshift('./') 83 | paths.uniq! 84 | paths.each do |path| 85 | bin = File.expand_path(program, path) 86 | bin += '.exe' if Gem.win_platform? 87 | return bin if File.file?(bin) && File.executable?(bin) 88 | end 89 | nil 90 | end 91 | 92 | # Returns the absolute path to the binary with the given name on the current 93 | # `PATH`, or raises if none is found. 94 | # 95 | # @param [String] program 96 | # The name of the program being searched for. 97 | # 98 | # @return [String] The absolute path to the given program. 99 | # 100 | def self.which!(program) 101 | which(program).tap do |bin| 102 | raise Informative, "Unable to locate the executable `#{program}`" unless bin 103 | end 104 | end 105 | 106 | # Runs the given command, capturing the desired output. 107 | # 108 | # @param [String] executable 109 | # The binary to use. 110 | # 111 | # @param [Array<#to_s>] command 112 | # The command to send to the binary. 113 | # 114 | # @param [Symbol] capture 115 | # Whether it should raise if the command fails. 116 | # 117 | # @param [Hash] env 118 | # Environment variables to be set for the command. 119 | # 120 | # @raise If the executable could not be located. 121 | # 122 | # @return [(String, Process::Status)] 123 | # The desired captured output from the command, and the status from 124 | # running the command. 125 | # 126 | def self.capture_command(executable, command, capture: :merge, env: {}, **kwargs) 127 | bin = which!(executable) 128 | 129 | require 'open3' 130 | command = command.map(&:to_s) 131 | case capture 132 | when :merge then Open3.capture2e(env, [bin, bin], *command, **kwargs) 133 | when :both then Open3.capture3(env, [bin, bin], *command, **kwargs) 134 | when :out then Open3.capture3(env, [bin, bin], *command, **kwargs).values_at(0, -1) 135 | when :err then Open3.capture3(env, [bin, bin], *command, **kwargs).drop(1) 136 | when :none then Open3.capture3(env, [bin, bin], *command, **kwargs).last 137 | end 138 | end 139 | 140 | # (see Executable.capture_command) 141 | # 142 | # @raise If running the command fails 143 | # 144 | def self.capture_command!(executable, command, **kwargs) 145 | capture_command(executable, command, **kwargs).tap do |result| 146 | result = Array(result) 147 | status = result.last 148 | unless status.success? 149 | output = result[0..-2].join 150 | raise Informative, "#{executable} #{command.join(' ')}\n\n#{output}".strip 151 | end 152 | end 153 | end 154 | 155 | def self.popen3(bin, command, stdout, stderr) 156 | require 'open3' 157 | Open3.popen3(bin, *command) do |i, o, e, t| 158 | reader(o, stdout) 159 | reader(e, stderr) 160 | i.close 161 | 162 | status = t.value 163 | 164 | o.flush 165 | e.flush 166 | sleep(0.01) 167 | 168 | status 169 | end 170 | end 171 | 172 | def self.reader(input, output) 173 | Thread.new do 174 | buf = '' 175 | begin 176 | loop do 177 | buf << input.readpartial(4096) 178 | loop do 179 | string, separator, buf = buf.partition(/[\r\n]/) 180 | if separator.empty? 181 | buf = string 182 | break 183 | end 184 | output << (string << separator) 185 | end 186 | end 187 | rescue IOError, EOFError 188 | output << (buf << $RS) unless buf.empty? 189 | end 190 | end 191 | end 192 | 193 | #-------------------------------------------------------------------------# 194 | 195 | # Helper class that allows to write to an {IO} instance taking into account 196 | # the UI indentation level. 197 | # 198 | class Indenter < ::Array 199 | # @return [Fixnum] The indentation level of the UI. 200 | # 201 | attr_reader :indent 202 | 203 | # @return [IO] the {IO} to which the output should be printed. 204 | # 205 | attr_reader :io 206 | 207 | # Init a new Indenter 208 | # 209 | # @param [IO] io @see io 210 | # 211 | def initialize(io = nil) 212 | @io = io 213 | @indent = ' ' * 1 214 | end 215 | 216 | # Stores a portion of the output and prints it to the {IO} instance. 217 | # 218 | # @param [String] value 219 | # the output to print. 220 | # 221 | # @return [void] 222 | # 223 | def <<(value) 224 | super 225 | io << "#{indent}#{value}" if io 226 | end 227 | end 228 | end 229 | end 230 | -------------------------------------------------------------------------------- /lib/hmap/helper/utils.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: false 2 | require 'stringio' 3 | require 'fileutils' 4 | module HMap 5 | # A collection of utility functions used throughout cocoapods-hmap. 6 | module Utils 7 | # Converts the symbolic name of a platform to a string name suitable to be 8 | # presented to the user. 9 | # 10 | # @param [Symbol] symbolic_name 11 | # the symbolic name of a platform. 12 | # 13 | # @return [String] The string that describes the name of the given symbol. 14 | # 15 | def self.effective_platform_name(symbolic_name) 16 | case symbolic_name 17 | when :ios then %w[iphoneos iphonesimulator] 18 | when :osx then %w[macosx] 19 | when :watchos then %w[watchos watchsimulator] 20 | when :tvos then %w[appletvos appletvsimulator] 21 | else [] 22 | end 23 | end 24 | 25 | def self.effective_platforms_names(platforms) 26 | platforms.flat_map { |name| effective_platform_name(name) }.compact.uniq 27 | end 28 | 29 | def self.index_of_range(num, range) 30 | num &= range - 1 31 | num 32 | end 33 | 34 | def self.power_of_two?(num) 35 | num != 0 && (num & (num - 1)).zero? 36 | end 37 | 38 | def self.next_power_of_two(num) 39 | num |= (num >> 1) 40 | num |= (num >> 2) 41 | num |= (num >> 4) 42 | num |= (num >> 8) 43 | num |= (num >> 16) 44 | num |= (num >> 32) 45 | num + 1 46 | end 47 | 48 | def self.hash_set_value(hash, *args) 49 | args.each do |arg| 50 | hash.merge(arg) 51 | end 52 | hash 53 | end 54 | 55 | def self.specialize_format(format, swapped) 56 | modifier = swapped ? '<' : '>' 57 | format.tr('=', modifier) 58 | end 59 | 60 | def self.string_downcase_hash(str) 61 | str.downcase.bytes.inject(:+) * 13 62 | end 63 | 64 | def self.update_changed_file(path, contents) 65 | if path.exist? 66 | content_stream = StringIO.new(contents) 67 | identical = File.open(path, 'rb') { |f| FileUtils.compare_stream(f, content_stream) } 68 | return if identical 69 | end 70 | path.dirname.mkpath 71 | File.open(path, 'w') { |f| f.write(contents) } 72 | end 73 | 74 | def self.file_symlink_to(path, filepath) 75 | return unless path.exist? 76 | 77 | filepath.dirname.mkpath unless filepath.exist? 78 | 79 | if Gem.win_platform? 80 | FileUtils.ln(path, filepath, force: true) 81 | else 82 | FileUtils.ln_sf(path, filepath) 83 | end 84 | end 85 | 86 | def self.swapped_magic?(magic, version) 87 | magic.eql?(HEADER_CONST[:HMAP_SWAPPED_MAGIC]) && version.eql?(HEADER_CONST[:HMAP_SWAPPED_VERSION]) 88 | end 89 | 90 | def self.magic?(magic) 91 | magic.eql?(HEADER_CONST[:HMAP_SWAPPED_MAGIC]) || magic.eql?(HEADER_CONST[:HMAP_HEADER_MAGIC_NUMBER]) 92 | end 93 | 94 | def self.safe_encode(string, target_encoding) 95 | string.encode(target_encoding) 96 | rescue Encoding::InvalidByteSequenceError 97 | string.force_encoding(target_encoding) 98 | rescue Encoding::UndefinedConversionError 99 | string.encode(target_encoding, fallback: lambda { |c| 100 | c.force_encoding(target_encoding) 101 | }) 102 | end 103 | end 104 | end 105 | -------------------------------------------------------------------------------- /lib/hmap/hmap/hmap_bucketstr.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module HMap 4 | # hmap bucket string 5 | class BucketStr 6 | attr_reader :key, :perfix, :suffix 7 | 8 | def initialize(key, perfix, suffix) 9 | @key = key 10 | @perfix = perfix 11 | @suffix = suffix 12 | end 13 | 14 | def value 15 | [perfix, suffix] 16 | end 17 | 18 | def to_a 19 | [key, perfix, suffix] 20 | end 21 | 22 | def description 23 | <<-DESC 24 | Key #{@key} -> Prefix #{@perfix}, Suffix #{@suffix} 25 | DESC 26 | end 27 | end 28 | end 29 | -------------------------------------------------------------------------------- /lib/hmap/hmap/hmap_reader.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | require 'hmap/hmap/hmap_struct' 3 | 4 | module HMap 5 | # hmap file reader 6 | class MapFileReader 7 | # @return [String, nil] the filename loaded from, or nil if loaded from a binary 8 | # string 9 | attr_reader :filename 10 | # # @return [Hash] any parser options that the instance was created with 11 | # attr_reader :options 12 | 13 | # @return true/false the swapped of the mapfile 14 | attr_reader :swapped 15 | 16 | # @return [HMap::HMapHeader] 17 | attr_reader :header 18 | 19 | # @return [Hash HMap::BucketStr>] an array of the file's bucktes 20 | # @note bucktes are provided in order of ascending offset. 21 | attr_reader :bucktes 22 | 23 | def initialize(path) 24 | raise ArgumentError, "#{path}: no such file" unless File.file?(path) 25 | 26 | @filename = path 27 | @raw_data = File.open(@filename, 'rb', &:read) 28 | populate_fields 29 | puts description 30 | end 31 | 32 | # Populate the instance's fields with the raw HMap data. 33 | # @return [void] 34 | # @note This method is public, but should (almost) never need to be called. 35 | def populate_fields 36 | @header = populate_hmap_header 37 | string_t = @raw_data[header.strings_offset..] 38 | @bucktes = populate_buckets do |bucket| 39 | bucket_s = bucket.to_a.map do |key| 40 | string_t[key..].match(/[^\0]+/)[0] 41 | end 42 | BucketStr.new(*bucket_s) 43 | end 44 | end 45 | 46 | private 47 | 48 | # The file's HMapheader structure. 49 | # @return [HMap::HMapHeader] 50 | # @raise [TruncatedFileError] if the file is too small to have a valid header 51 | # @api private 52 | def populate_hmap_header 53 | raise TruncatedFileError if @raw_data.size < HMapHeader.bytesize + 8 * HMapBucket.bytesize 54 | 55 | populate_and_check_magic 56 | HMapHeader.new_from_bin(swapped, @raw_data[0, HMapHeader.bytesize]) 57 | end 58 | 59 | # Read just the file's magic number and check its validity. 60 | # @return [Integer] the magic 61 | # @raise [MagicError] if the magic is not valid HMap magic 62 | # @api private 63 | def populate_and_check_magic 64 | magic = @raw_data[0..3].unpack1('N') 65 | raise MagicError, magic unless Utils.magic?(magic) 66 | 67 | version = @raw_data[4..5].unpack1('n') 68 | @swapped = Utils.swapped_magic?(magic, version) 69 | end 70 | 71 | # All buckets in the file. 72 | # @return [Array] an array of buckets 73 | # @api private 74 | def populate_buckets 75 | bucket_offset = header.class.bytesize 76 | bucktes = [] 77 | header.num_buckets.times do |i| 78 | bucket = HMapBucket.new_from_bin(swapped, @raw_data[bucket_offset, HMapBucket.bytesize]) 79 | bucket_offset += HMapBucket.bytesize 80 | next if bucket.key == HEADER_CONST[:HMAP_EMPTY_BUCKT_KEY] 81 | 82 | bucktes[i] = { bucket => yield(bucket) } 83 | end 84 | bucktes 85 | end 86 | 87 | # description 88 | def description 89 | sum = " Header map path: #{filename}\n" + header.description 90 | bucktes.each_with_index do |buckte_h, index| 91 | sum += "\t- Bucket: #{index}" + Utils.safe_encode(buckte_h.values[0].description, 'UTF-8') unless buckte_h.nil? 92 | sum 93 | end 94 | sum 95 | end 96 | end 97 | end 98 | -------------------------------------------------------------------------------- /lib/hmap/hmap/hmap_saver.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'hmap/hmap/hmap_struct' 4 | require 'hmap/hmap/mapfile' 5 | require 'hashtable' 6 | 7 | module HMap 8 | # @class HMapSaver 9 | class HMapSaver 10 | attr_reader :string_table 11 | 12 | def self.new_from_buckets(buckets) 13 | saver = new 14 | saver.add_to_buckets(buckets) unless buckets.empty? 15 | saver 16 | end 17 | 18 | def add_to_buckets(buckets) 19 | return if buckets.nil? 20 | 21 | hash_t = HashTable::HashTable.new_from_vlaue_placeholder(buckets.length, EMPTY_BUCKET, expand: true) 22 | ta = HashTable::StringHashTraits.new { |bs| HMapBucket.new(*bs).serialize } 23 | buckets.each_pair do |key, value| 24 | hash_t.set(key, value, ta) 25 | end 26 | @strings = ta.string_table 27 | @buckets = hash_t.values 28 | @entries = hash_t.num_entries 29 | end 30 | 31 | def write_to(path) 32 | MapFile.new(@strings, @buckets, @entries).write(Pathname(path)) 33 | end 34 | end 35 | end 36 | -------------------------------------------------------------------------------- /lib/hmap/hmap/hmap_struct.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module HMap 4 | HEADER_CONST = { 5 | HMAP_HEADER_MAGIC_NUMBER: 0x686d6170, 6 | HMAP_HEADER_VERSION: 0x0001, 7 | HMAP_EMPTY_BUCKT_KEY: 0, 8 | HMAP_SWAPPED_MAGIC: 0x70616d68, 9 | HMAP_SWAPPED_VERSION: 0x0100 10 | }.freeze 11 | 12 | EMPTY_HMAP = "pamh\u0001\u0000\u0000\u0000x\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000" 13 | EMPTY_BUCKET = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" 14 | private_constant :EMPTY_HMAP 15 | # A general purpose pseudo-structure. 16 | # @abstract 17 | class HMapStructure 18 | # The String#unpack format of the data structure. 19 | # @return [String] the unpacking format 20 | # @api private 21 | FORMAT = '' 22 | 23 | # The size of the data structure, in bytes. 24 | # @return [Integer] the size, in bytes 25 | # @api private 26 | SIZEOF = 0 27 | 28 | SWAPPED = true 29 | 30 | # @return [Integer] the size, in bytes, of the represented structure. 31 | def self.bytesize 32 | self::SIZEOF 33 | end 34 | 35 | def self.format 36 | self::FORMAT 37 | end 38 | 39 | def self.swapped? 40 | self::SWAPPED 41 | end 42 | 43 | # @param endianness [Symbol] either `:big` or `:little` 44 | # @param bin [String] the string to be unpacked into the new structure 45 | # @return [HMap::HMapStructure] the resulting structure 46 | # @api private 47 | def self.new_from_bin(swapped, bin) 48 | format = Utils.specialize_format(self::FORMAT, swapped) 49 | new(*bin.unpack(format)) 50 | end 51 | 52 | def serialize 53 | [].pack(format) 54 | end 55 | 56 | # @return [Hash] a hash representation of this {HMapStructure}. 57 | def to_h 58 | { 59 | 'structure' => { 60 | 'format' => self.class::FORMAT, 61 | 'bytesize' => self.class.bytesize 62 | } 63 | } 64 | end 65 | end 66 | 67 | # HMapHeader structure. 68 | # @see https://clang.llvm.org/doxygen/structclang_1_1HMapHeader.html 69 | # @abstract 70 | class HMapHeader < HMapStructure 71 | # @return [HMap::HMapHeader, nil] the raw view associated with the load command, 72 | # or nil if the HMapHeader was created via {create}. 73 | attr_reader :num_entries, :magic, :version, :reserved, :strings_offset, :num_buckets, :max_value_length 74 | 75 | FORMAT = 'L=1S=2L=4' 76 | # @see HMapStructure::SIZEOF 77 | # @api private 78 | SIZEOF = 24 79 | 80 | # @api private 81 | def initialize(magic, version, reserved, strings_offset, num_entries, num_buckets, max_value_length) 82 | @magic = magic 83 | @version = version 84 | @reserved = reserved 85 | @strings_offset = strings_offset 86 | @num_entries = num_entries 87 | @num_buckets = num_buckets 88 | @max_value_length = max_value_length 89 | super() 90 | end 91 | 92 | # @return [String] the serialized fields of the mafile 93 | def serialize 94 | format = Utils.specialize_format(FORMAT, SWAPPED) 95 | [magic, version, reserved, strings_offset, num_entries, num_buckets, max_value_length].pack(format) 96 | end 97 | 98 | def description 99 | <<-DESC 100 | Hash bucket count: #{@num_buckets} 101 | String table entry count: #{@num_entries} 102 | Max value length: #{@max_value_length} 103 | DESC 104 | end 105 | 106 | def to_h 107 | { 108 | 'magic' => magic, 109 | 'version' => version, 110 | 'reserved' => reserved, 111 | 'strings_offset' => strings_offset, 112 | 'num_entries' => num_entries, 113 | 'num_buckets' => num_buckets, 114 | 'max_value_length' => max_value_length 115 | }.merge super 116 | end 117 | end 118 | 119 | # HMapBucket structure. 120 | # @see https://clang.llvm.org/doxygen/structclang_1_1HMapHeader.html 121 | # @abstract 122 | class HMapBucket < HMapStructure 123 | attr_accessor :key, :perfix, :suffix 124 | 125 | SIZEOF = 12 126 | FORMAT = 'L=3' 127 | 128 | def initialize(key, perfix, suffix) 129 | @key = key 130 | @perfix = perfix 131 | @suffix = suffix 132 | super() 133 | end 134 | 135 | # @return [String] the serialized fields of the mafile 136 | def serialize 137 | format = Utils.specialize_format(FORMAT, SWAPPED) 138 | [key, perfix, suffix].pack(format) 139 | end 140 | 141 | def to_a 142 | [key, perfix, suffix] 143 | end 144 | 145 | def to_h 146 | { 147 | 'key' => key, 148 | 'perfix' => perfix, 149 | 'suffix' => suffix 150 | }.merge super 151 | end 152 | end 153 | 154 | # HMap blobs. 155 | class HMapData 156 | def initialize(strings, buckets, entries) 157 | super() 158 | return if strings.nil? || buckets.empty? 159 | 160 | @buckets = buckets 161 | @strings = strings 162 | @header = populate_hmap_header(buckets.count, entries) 163 | end 164 | 165 | # @return [String] the serialized fields of the mafile 166 | def serialize 167 | return EMPTY_HMAP if @strings.nil? 168 | 169 | @header.serialize + @buckets.join + @strings 170 | end 171 | 172 | private 173 | 174 | def populate_hmap_header(num_buckets, entries) 175 | strings_offset = HMapHeader.bytesize + HMapBucket.bytesize * num_buckets 176 | HMapHeader.new(HEADER_CONST[:HMAP_HEADER_MAGIC_NUMBER], 177 | HEADER_CONST[:HMAP_HEADER_VERSION], 0, strings_offset, entries, num_buckets, 0) 178 | end 179 | end 180 | end 181 | -------------------------------------------------------------------------------- /lib/hmap/hmap/hmap_writer.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | require 'hmap/xc/workspace/workspace' 3 | 4 | module HMap 5 | class HMapTarget 6 | attr_reader :name, :target 7 | end 8 | 9 | # Helper module which returns handle method from MapFileWriter. 10 | class MapFileWriter 11 | # @param save_origin_header_search_paths save_origin_header_search_paths 12 | # @param clean_hmap clean up all hmap setup 13 | # @param allow_targets this targets will save origin build setting 14 | # @param use_build_in_headermap option use Xcode header map 15 | def initialize(use_origin, project_root, clean_hmap) 16 | UserInterface.puts("[hmapfile] Workspace/project root: #{project_root}") 17 | UserInterface.puts('[hmapfile] Analyzing dependencies') 18 | Resolver.instance.installation_root = project_root 19 | Resolver.instance.use_origin = use_origin 20 | create_hmapfile(clean_hmap) 21 | end 22 | 23 | # Integrates the projects mapfile associated 24 | # with the App project and Pods project. 25 | # 26 | # @param [clean] clean hmap dir @see #podfile 27 | # @return [void] 28 | # 29 | def create_hmapfile(clean) 30 | # {a,b}– Match pattern a or b. 31 | # Though this looks like a regular expression quantifier, it isn't. 32 | # For example, in regular expression, the pattern a{1,2} will match 1 or 2 'a' characters. 33 | # In globbing, it will match the string a1 or a2. 34 | paths = Dir.glob(File.join(Resolver.instance.installation_root, '*.{xcworkspace,xcodeproj}')) || [] 35 | workspace_paths = paths.select { |f| File.extname(f) == '.xcworkspace' } 36 | xcs = if workspace_paths.empty? 37 | project_paths = paths.select { |f| File.extname(f) == '.xcodeproj' } 38 | Workspace.new_from_xcprojects(project_paths) unless project_paths.nil? 39 | else 40 | Workspace.new_from_xcworkspaces(workspace_paths) 41 | end 42 | if xcs.empty? 43 | UserInterface.puts("\n[hmapfile] Gen [ERROR] path: #{Resolver.instance.installation_root} not contain .{xcworkspace,xcodeproj} file!".red) 44 | end 45 | xcs.each do |xc| 46 | if clean 47 | xc.remove_hmap_settings! 48 | else 49 | xc.write_save! 50 | end 51 | end 52 | end 53 | end 54 | end 55 | -------------------------------------------------------------------------------- /lib/hmap/hmap/mapfile.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module HMap 4 | # hmap file writer 5 | class MapFile 6 | # @api private 7 | def initialize(strings, buckets, entries) 8 | @map_data = HMapData.new(strings, buckets, entries) 9 | end 10 | 11 | # @return [String] the serialized fields of the mafile 12 | def serialize 13 | @map_data.serialize 14 | end 15 | 16 | # Write all mafile data to the given filename. 17 | # @param filename [String] the file to write to 18 | # @return [void] 19 | def write(filepath, contents = nil) 20 | contents = serialize if contents.nil? 21 | Utils.update_changed_file(filepath, contents) 22 | end 23 | end 24 | end 25 | -------------------------------------------------------------------------------- /lib/hmap/user_interface.rb: -------------------------------------------------------------------------------- 1 | module HMap 2 | # Manages the UI output so clients can customize it. 3 | # 4 | module UserInterface 5 | # Prints a message to standard output. 6 | # 7 | # @return [void] 8 | # 9 | def self.puts(message) 10 | STDOUT.puts message 11 | end 12 | 13 | # Prints a message to standard error. 14 | # 15 | # @return [void] 16 | # 17 | def self.warn(message) 18 | STDERR.puts message 19 | end 20 | end 21 | UI = UserInterface 22 | end -------------------------------------------------------------------------------- /lib/hmap/xc/context.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module HMap 4 | class Context 5 | attr_reader :build_root, :hmap_root, :temp_name, :build_dir, :temp_dir 6 | 7 | def initialize(build_root, temp_dir, hmap_root, temp_name, build_dir) 8 | @build_root = build_root 9 | @temp_dir = temp_dir 10 | @hmap_root = hmap_root 11 | @temp_name = temp_name 12 | @build_dir = build_dir || '' 13 | end 14 | 15 | def build_path(platform) 16 | File.join(build_root, platform.to_s, build_dir) 17 | end 18 | 19 | def temp_path(platform) 20 | File.join(temp_dir, platform.to_s, temp_name) 21 | end 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /lib/hmap/xc/header_entry.rb: -------------------------------------------------------------------------------- 1 | module HMap 2 | class HeaderEntry 3 | attr_reader :path, :extra_keys, :type 4 | 5 | def initialize(path, extra_keys, type) 6 | @path = path 7 | @extra_keys = extra_keys 8 | @type = type 9 | end 10 | 11 | def project_buckets 12 | h_name = File.basename(path) 13 | h_dir = File.dirname(path) 14 | { h_name => ["#{h_dir}/", h_name] } 15 | end 16 | 17 | def module_buckets(moudle_name) 18 | h_name = File.basename(path) 19 | module_p = "#{moudle_name}/" 20 | { h_name => [module_p, h_name] } 21 | end 22 | 23 | def full_module_buckets(moudle_name) 24 | h_name = File.basename(path) 25 | h_dir = File.dirname(path) 26 | module_k = "#{moudle_name}/#{h_name}" 27 | { module_k => ["#{h_dir}/", h_name] } 28 | end 29 | 30 | def project_buckets_extra 31 | h_name = File.basename(path) 32 | h_dir = File.dirname(path) 33 | buckets = {} 34 | buckets[h_name] = ["#{h_dir}/", h_name] unless extra_keys.include?(h_name) 35 | extra_keys.each { |key| buckets[key] = ["#{h_dir}/", h_name] } 36 | buckets 37 | end 38 | 39 | def module_buckets_extra(moudle_name) 40 | h_name = File.basename(path) 41 | module_p = "#{moudle_name}/" 42 | buckets = {} 43 | buckets[h_name] = [module_p, h_name] unless extra_keys.include?(h_name) 44 | extra_keys.each { |key| buckets[key] = [module_p, h_name] } 45 | buckets 46 | end 47 | 48 | def full_module_buckets_extra(moudle_name) 49 | h_name = File.basename(path) 50 | h_dir = File.dirname(path) 51 | module_k = "#{moudle_name}/#{h_name}" 52 | buckets = {} 53 | buckets[module_k] = ["#{h_dir}/", h_name] unless extra_keys.include?(module_k) 54 | extra_keys.each { |key| buckets[key] = ["#{h_dir}/", h_name] } 55 | buckets 56 | end 57 | end 58 | end 59 | -------------------------------------------------------------------------------- /lib/hmap/xc/header_type.rb: -------------------------------------------------------------------------------- 1 | 2 | require 'hmap/xc/header_entry' 3 | 4 | module HMap 5 | module HeaderType 6 | def public_entrys 7 | return @public_entrys if defined?(@public_entrys) 8 | 9 | @public_entrys = entrys.select { |entry| entry.type == :Public } 10 | end 11 | 12 | def private_entrys 13 | return @private_entrys if defined?(@private_entrys) 14 | 15 | @private_entrys = entrys.select { |entry| entry.type == :Private } 16 | end 17 | 18 | def project_entrys 19 | return @project_entrys if defined?(@project_entrys) 20 | 21 | @project_entrys = entrys.select { |entry| entry.type == :Project } 22 | end 23 | 24 | def use_vfs? 25 | !public_entrys.empty? || !private_entrys.empty? || build_as_framework? 26 | end 27 | 28 | def headers_hash(*types) 29 | Hash[types.map { |type| [type, send(type)] }] 30 | end 31 | end 32 | end 33 | -------------------------------------------------------------------------------- /lib/hmap/xc/pbx_helper.rb: -------------------------------------------------------------------------------- 1 | module HMap 2 | module PBXHelper 3 | PBX_GROUP = ''.freeze 4 | PBX_SOURCE_ROOT = 'SOURCE_ROOT'.freeze 5 | private_constant :PBX_GROUP, :PBX_SOURCE_ROOT 6 | def self.get_groups(xct) 7 | groups = xct.referrers.select { |e| e.is_a?(Constants::PBXGroup) } || [] 8 | groups += groups.flat_map { |g| get_groups(g) } 9 | groups.compact 10 | end 11 | 12 | def self.group_paths(xct) 13 | gs = get_groups(xct).reverse 14 | ps = gs.map do |g| 15 | s_hash = g.instance_variable_get('@simple_attributes_hash') 16 | s_hash['path'] unless s_hash.nil? && s_hash['sourceTree'] == PBX_GROUP 17 | end.compact 18 | File.join(*ps) 19 | end 20 | 21 | def self.uses_swift?(target) 22 | source_files = target.build_phases.flat_map do |phase| 23 | phase.files if phase.is_a?(Constants::PBXSourcesBuildPhase) 24 | end.compact 25 | source_files.any? do |file| 26 | path = file.file_ref.instance_variable_get('@simple_attributes_hash')['path'] || '' 27 | File.extname(path) == '.swift' 28 | end 29 | end 30 | 31 | def self.build_as_framework?(target) 32 | target.symbol_type == :framework if target.respond_to?(:symbol_type) 33 | end 34 | 35 | def self.defines_module?(target) 36 | return true if build_as_framework?(target) 37 | 38 | bus = target.build_configuration_list.build_configurations.map do |bu| 39 | bu.instance_variable_get('@simple_attributes_hash')['buildSettings'] || {} 40 | end 41 | 42 | bus.any? { |s| s['DEFINES_MODULE'] == 'YES' } 43 | end 44 | 45 | def self.projects(*p_paths) 46 | return if p_paths.empty? 47 | 48 | p_paths.flat_map do |pj| 49 | project = Xcodeproj::Project.open(pj) 50 | p_path = File.dirname(project.path) 51 | project.root_object.project_references.map do |sp| 52 | ff = sp[:project_ref] 53 | f_hash = ff.instance_variable_get('@simple_attributes_hash') 54 | g_path = PBXHelper.group_paths(ff) if f_hash['sourceTree'] == PBX_GROUP 55 | path = f_hash['path'] || '' 56 | full_path = File.join(p_path, g_path || '', path) 57 | Xcodeproj::Project.open(full_path) 58 | end << project 59 | end 60 | end 61 | 62 | def self.project_references(project) 63 | return if project.nil? 64 | 65 | p_path = File.dirname(project.path) 66 | project.root_object.project_references.map do |sp| 67 | ff = sp[:project_ref] 68 | path = ff.instance_variable_get('@simple_attributes_hash')['path'] || '' 69 | full_path = File.join(p_path, path) 70 | Xcodeproj::Project.open(full_path) 71 | end 72 | end 73 | end 74 | end 75 | -------------------------------------------------------------------------------- /lib/hmap/xc/product_helper.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | require 'hmap/xc/resolver' 3 | module HMap 4 | class ProductPath 5 | attr_reader :path, :build_setting, :name 6 | 7 | def initialize(path) 8 | @path = path 9 | raise ArgumentError, "#{path}: can not get build directory" if @build_setting.nil? 10 | end 11 | 12 | def build_root 13 | Pathname(build_setting[Constants::BUILD_DIR]) 14 | end 15 | 16 | def obj_root 17 | Pathname(build_setting[Constants::OBJROOT]) 18 | end 19 | end 20 | 21 | class WorkspaceProductPath < ProductPath 22 | def initialize(path) 23 | @name = File.basename(path, '.xcworkspace') 24 | @build_setting = Resolver.instance.workspace_build_settings(path) 25 | super 26 | end 27 | end 28 | 29 | class ProjectProductPath < ProductPath 30 | def initialize(path) 31 | @name = File.basename(path, '.xcodeproj') 32 | @build_setting = Resolver.instance.project_build_settings(path) 33 | super 34 | end 35 | end 36 | end 37 | -------------------------------------------------------------------------------- /lib/hmap/xc/resolver.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'hmap/helper/executable' 4 | 5 | module HMap 6 | class Resolver 7 | # @return [Array] The filenames that the Podfile can have ordered 8 | # by priority. 9 | # 10 | PODFILE_NAMES = [ 11 | 'CocoaPods.podfile.yaml', 12 | 'CocoaPods.podfile', 13 | 'Podfile', 14 | 'Podfile.rb' 15 | ].freeze 16 | 17 | attr_accessor :use_origin 18 | 19 | def self.instance 20 | @instance ||= new 21 | end 22 | 23 | # Sets the current config instance. If set to nil the config will be 24 | # recreated when needed. 25 | # 26 | # @param [Config, Nil] the instance. 27 | # 28 | # @return [void] 29 | # 30 | class << self 31 | attr_writer :instance 32 | end 33 | 34 | def workspace_build_settings(workspace) 35 | workspace_dic = xcodebuild_list(workspace)['workspace'] 36 | schemes = workspace_dic['schemes'] || [] 37 | targets = xcodebuild_workspace(workspace, schemes[0]) || [] 38 | targets.first['buildSettings'] 39 | end 40 | 41 | def project_build_settings(project_path) 42 | targets = xcodebuild_project(project_path) || [] 43 | targets.first['buildSettings'] 44 | end 45 | 46 | # @return [Pathname] the root of the workspace or project where is located. 47 | # 48 | def installation_root 49 | @installation_root ||= begin 50 | current_dir = Pathname.new(Dir.pwd.unicode_normalize) 51 | current_path = current_dir 52 | until current_path.root? 53 | if podfile_path_in_dir(current_path) 54 | installation_root = current_path 55 | puts("[in #{current_path}]") unless current_path == current_dir 56 | break 57 | else 58 | current_path = current_path.parent 59 | end 60 | end 61 | installation_root || current_dir 62 | end 63 | end 64 | 65 | attr_writer :installation_root 66 | alias project_root installation_root 67 | 68 | def verbose? 69 | false 70 | end 71 | 72 | # @return [String] Executes xcodebuild list in the current working directory and 73 | # returns its output (both STDOUT and STDERR). 74 | # 75 | def xcodebuild_list(workspace) 76 | command = %W[-workspace #{workspace}] 77 | command += %w[-json -list] 78 | results = Executable.execute_command('xcodebuild', command, false) 79 | JSON.parse(results) unless results.nil? 80 | end 81 | 82 | # @return [hash] Executes xcodebuild -workspace -scheme in the current working directory and 83 | # returns its output (both STDOUT and STDERR). 84 | # 85 | def xcodebuild_workspace(workspace, scheme) 86 | command = %W[-workspace #{workspace}] 87 | command += %W[-scheme #{scheme}] 88 | xcodebuild(command) 89 | end 90 | 91 | # @return [hash] Executes xcodebuild -project in the current working directory and 92 | # returns its output (both STDOUT and STDERR). 93 | # 94 | def xcodebuild_project(project) 95 | command = %W[-project #{project}] 96 | xcodebuild(command) 97 | end 98 | 99 | private 100 | 101 | # Returns the path of the Podfile in the given dir if any exists. 102 | # 103 | # @param [Pathname] dir 104 | # The directory where to look for the Podfile. 105 | # 106 | # @return [Pathname] The path of the Podfile. 107 | # @return [Nil] If not Podfile was found in the given dir 108 | # 109 | def podfile_path_in_dir(dir) 110 | PODFILE_NAMES.each do |filename| 111 | candidate = dir + filename 112 | return candidate if candidate.file? 113 | end 114 | nil 115 | end 116 | 117 | # @return [hash] Executes xcodebuild in the current working directory, get build settings and 118 | # returns its output as hash (both STDOUT and STDERR). 119 | # 120 | def xcodebuild(command) 121 | command += %w[-json -showBuildSettings] 122 | results = Executable.execute_command('xcodebuild', command, false) 123 | index = results.index(/"action"/m) 124 | reg = results[index..] 125 | reg = "[\n{\n#{reg}" 126 | JSON.parse(reg) unless results.nil? 127 | end 128 | end 129 | end 130 | -------------------------------------------------------------------------------- /lib/hmap/xc/target/build_setting.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'hmap/xc/target/target_vfs' 4 | 5 | module HMap 6 | class Platform 7 | attr_reader :configuration, :platform 8 | 9 | def self.new_from_platforms(configuration, platforms) 10 | Utils.effective_platforms_names(platforms).map { |pl| new(configuration, pl) } 11 | end 12 | 13 | def initialize(configuration, platform) 14 | @configuration = configuration 15 | @platform = platform 16 | end 17 | 18 | def to_s 19 | "#{configuration}-#{platform}" 20 | end 21 | end 22 | end 23 | 24 | module HMap 25 | class BuildSettings 26 | attr_reader :type, :platform 27 | 28 | def self.new_from_platforms(type, platforms, context) 29 | platforms.map { |platform| new(type, platform.to_s, context) } 30 | end 31 | 32 | def initialize(type, platform, context) 33 | @type = type 34 | @platform = platform.to_s || '' 35 | @context = context 36 | end 37 | 38 | def write_or_symlink(path, data, need_platform) 39 | return if data.nil? && path.nil? 40 | 41 | if data.nil? 42 | dir = platform if type == :all_product_headers 43 | path = Constants.instance.full_hmap_filepath(type, path, dir) 44 | symlink_to(path, need_platform) 45 | else 46 | write(data, need_platform) 47 | end 48 | end 49 | 50 | private 51 | 52 | def file_name 53 | return @file_name if defined? @file_name 54 | 55 | product_name = @context.product_name if @context.respond_to? :product_name 56 | @file_name = Constants.instance.full_hmap_filename(type, product_name) 57 | end 58 | 59 | def hmap_filepath(need_platform) 60 | platform = '' 61 | platform = @platform if need_platform 62 | hmap_root = File.join(@context.hmap_root, platform, @context.temp_name) 63 | File.join(hmap_root, file_name) 64 | end 65 | 66 | def symlink_to(path, need_platform) 67 | Utils.file_symlink_to(path, Pathname.new(hmap_filepath(need_platform))) 68 | end 69 | 70 | def write(data, need_platform) 71 | path = Constants.instance.full_hmap_filepath(type, hmap_filepath(need_platform)) 72 | if type == :all_product_headers 73 | da = data[platform] || [] 74 | TargetVFSWriter.new(da).write!(path) 75 | else 76 | HMapSaver.new_from_buckets(data).write_to(path) 77 | end 78 | end 79 | end 80 | 81 | class BuildSettingsWriter 82 | attr_reader :platforms 83 | 84 | # Initialize a new instance 85 | # 86 | # @param [Array] platforms 87 | # the platforms to lint. 88 | # 89 | # @param [HMap::Context] context 90 | # the Project or target information. 91 | # 92 | def initialize(platforms, context) 93 | @platforms = platforms 94 | @context = context 95 | end 96 | 97 | def write_or_symlink(path, data, platforms = []) 98 | build_settings.each do |setting| 99 | type_data = data[setting.type] unless data.nil? 100 | next if type_data.nil? && path.nil? 101 | 102 | need_platform = platforms.include?(setting.type) 103 | setting.write_or_symlink(path, type_data, need_platform) 104 | end 105 | end 106 | 107 | private 108 | 109 | def build_settings 110 | return @build_settings if defined? @build_settings 111 | 112 | @build_settings = Constants::HMAP_FILE_TYPE.flat_map do |type| 113 | if @platforms.empty? 114 | BuildSettings.new(type, nil, @context) 115 | else 116 | BuildSettings.new_from_platforms(type, @platforms, @context) 117 | end 118 | end 119 | end 120 | end 121 | end 122 | -------------------------------------------------------------------------------- /lib/hmap/xc/target/target.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'hmap/xc/target/build_setting' 4 | require 'hmap/xc/target/target_helper' 5 | require 'hmap/xc/target/xcconfig_helper' 6 | 7 | module HMap 8 | class Target 9 | include HMap::Target::Helper 10 | 11 | attr_reader :entrys, :target, :project 12 | attr_accessor :xcconfig_paths 13 | 14 | def initialize(entrys, target, project) 15 | @entrys = entrys || [] 16 | @target = target 17 | @project = project 18 | @xcconfig_paths = [] 19 | end 20 | 21 | def platforms 22 | project.platforms 23 | end 24 | 25 | def write_hmapfile! 26 | datas = headers_hash(:own_target_headers) 27 | build_settings = BuildSettingsWriter.new(platforms, context) 28 | build_settings.write_or_symlink(project.context.hmap_root, datas, Constants::HMAP_FILE_TYPE) 29 | end 30 | 31 | def save_hmap_settings! 32 | build_setting_paths.each do |path| 33 | settings = Constants.instance.hmap_build_settings 34 | XcodeprojHelper.new(path).add_build_settings_and_save(settings, use_origin: Resolver.instance.use_origin) 35 | end 36 | end 37 | 38 | def remove_hmap_settings! 39 | build_setting_paths.each { |path| HMap::XcodeprojHelper.new(path).remove_build_settings_and_save } 40 | end 41 | 42 | private 43 | 44 | def build_setting_paths 45 | return @build_setting_paths if defined?(@build_setting_paths) 46 | 47 | @build_setting_paths = xcconfig_paths.map do |path| 48 | xc = XCConfig.new(path) 49 | inc = xc.includes_paths 50 | path if inc.empty? || project.workspace.xcconfig_paths.none? { |pa| inc.include?(pa) } 51 | end.compact 52 | end 53 | 54 | # def xcconfig_paths 55 | # return @xcconfig_paths if defined?(@xcconfig_paths) 56 | 57 | # @xcconfig_paths = target.build_configurations.flat_map do |configuration| 58 | # if configuration.is_a?(Constants::XCBuildConfiguration) 59 | # bcr = configuration.base_configuration_reference 60 | # unless bcr.nil? 61 | # s_path = PBXHelper.group_paths(bcr) 62 | # x = bcr.instance_variable_get('@simple_attributes_hash')['path'] || '' 63 | # path = File.expand_path(File.join(project.project_dir, s_path, x)) 64 | # xc = XCConfig.new(path) 65 | # inc = xc.includes_paths 66 | # path if inc.empty? || project.workspace.xcconfig_paths.none? { |pa| inc.include?(pa) } 67 | # end 68 | # end 69 | # end.compact 70 | 71 | # @xcconfig_paths = target.build_configuration_list.build_configurations.flat_map do |configuration| 72 | # if configuration.is_a?(Constants::XCBuildConfiguration) 73 | # bcr = configuration.base_configuration_reference 74 | # # if bcr.nil? 75 | # # ab_path = Pathname(project.project_dir + "hmap-#{target_name}.#{configuration.name}.xcconfig") 76 | # # File.new(ab_path, 'w') unless ab_path.exist? 77 | # # xc_ref = target.project.new_file(ab_path) 78 | # # configuration.base_configuration_reference = xc_ref 79 | # # target.project.save 80 | # # ab_path 81 | # # else 82 | # unless bcr.nil? 83 | # s_path = PBXHelper.group_paths(bcr) 84 | # x = bcr.instance_variable_get('@simple_attributes_hash')['path'] || '' 85 | # File.expand_path File.join(project.project_dir, s_path, x) 86 | # end 87 | # end 88 | # end.compact 89 | # end 90 | end 91 | end 92 | -------------------------------------------------------------------------------- /lib/hmap/xc/target/target_context.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module HMap 4 | class Target 5 | class TargetContext < Context 6 | attr_reader :product_name 7 | 8 | def initialize(build_root, temp_dir, hmap_root, temp_name, build_dir, product_name, full_product_name, defines_modules, build_as_framework_swift) 9 | super(build_root, temp_dir, hmap_root, temp_name, build_dir) 10 | @full_product_name = full_product_name 11 | @product_name = product_name 12 | @defines_modules = defines_modules 13 | @build_as_framework_swift = build_as_framework_swift 14 | end 15 | 16 | def build_as_framework_swift? 17 | @build_as_framework_swift 18 | end 19 | 20 | def defines_modules? 21 | @defines_modules 22 | end 23 | 24 | def build_path(platform) 25 | path = super(platform) 26 | File.join(path, @full_product_name) 27 | end 28 | end 29 | end 30 | end 31 | -------------------------------------------------------------------------------- /lib/hmap/xc/target/target_helper.rb: -------------------------------------------------------------------------------- 1 | require 'hmap/xc/target/target_context' 2 | 3 | module HMap 4 | class Target 5 | module Helper 6 | include HMap::HeaderType 7 | 8 | define_method(:all_product_headers) do 9 | return @all_product_headers if defined? @all_product_headers 10 | 11 | public_headers = public_entrys.map(&:path) 12 | private_headers = private_entrys.map(&:path) 13 | @all_product_headers = TargetVFS.new(public_headers, private_headers, platforms, context).vfs_entrys 14 | end 15 | 16 | define_method(:all_non_framework_target_headers) do 17 | return if build_as_framework? 18 | 19 | return @all_non_framework_target_headers if defined? @all_non_framework_target_headers 20 | 21 | p_h = public_entrys + private_entrys 22 | @all_non_framework_target_headers = p_h.inject({}) do |sum, entry| 23 | sum.merge!(entry.full_module_buckets(product_name)) { |_, v1, _| v1 } 24 | end 25 | end 26 | 27 | # all_targets include header full module path 28 | define_method(:all_target_headers) do 29 | return @all_target_headers if defined? @all_target_headers 30 | 31 | p_h = public_entrys + private_entrys 32 | @all_target_headers = p_h.inject({}) do |sum, entry| 33 | sum.merge!(entry.module_buckets(product_name)) { |_, v1, _| v1 } 34 | sum.merge!(entry.full_module_buckets(product_name)) { |_, v1, _| v1 } 35 | end 36 | end 37 | 38 | define_method(:project_headers) do 39 | return @project_headers if defined? @project_headers 40 | 41 | p_h = public_entrys + private_entrys 42 | hs = p_h.inject({}) do |sum, entry| 43 | sum.merge!(entry.module_buckets(product_name)) { |_, v1, _| v1 } 44 | end 45 | @project_headers = project_entrys.inject(hs) do |sum, entry| 46 | sum.merge!(entry.project_buckets_extra) { |_, v1, _| v1 } 47 | end 48 | end 49 | 50 | define_method(:own_target_headers) do 51 | return @own_target_headers if defined? @own_target_headers 52 | 53 | headers = public_entrys + private_entrys 54 | hs = headers.inject({}) do |sum, entry| 55 | sum.merge!(entry.module_buckets(product_name)) { |_, v1, _| v1 } 56 | end 57 | @own_target_headers = project_entrys.inject(hs) do |sum, entry| 58 | sum.merge!(entry.project_buckets) { |_, v1, _| v1 } 59 | sum.merge!(entry.full_module_buckets(product_name)) { |_, v1, _| v1 } 60 | end 61 | end 62 | 63 | def build_root 64 | project.build_root 65 | end 66 | 67 | def hmap_root 68 | project.hmap_root 69 | end 70 | 71 | def target_name 72 | target.name 73 | end 74 | 75 | def product_name 76 | product_name = target.build_settings(target.build_configurations.first.name)['PRODUCT_NAME'] 77 | return target_name.gsub(/-/, '_') if product_name.nil? || product_name.include?('TARGET_NAME') 78 | 79 | product_name 80 | end 81 | 82 | def full_product_name 83 | target.product_reference.instance_variable_get('@simple_attributes_hash')['path'] || '' 84 | end 85 | 86 | def temp_name 87 | "#{target_name}.build" 88 | end 89 | 90 | def temp_dir 91 | project.temp_dir 92 | end 93 | 94 | def build_dir 95 | return @build_dir if defined?(@build_dir) 96 | 97 | b_d = build_setting_paths.none? { |path| XCConfig.new(path).attributes[Constants::CONFIGURATION_BUILD_DIR].nil? } 98 | @build_dir = target_name if b_d 99 | end 100 | 101 | def app_target? 102 | Xcodeproj::Constants::PRODUCT_UTI_EXTENSIONS[target.symbol_type] == 'app' 103 | end 104 | 105 | def build_as_framework? 106 | PBXHelper.build_as_framework?(target) 107 | end 108 | 109 | def build_as_framework_swift? 110 | uses_swift? && build_as_framework? 111 | end 112 | 113 | def uses_swift? 114 | return @uses_swift if defined?(@uses_swift) 115 | 116 | @uses_swift = PBXHelper.uses_swift?(target) 117 | end 118 | 119 | def defines_module? 120 | return @defines_module if defined?(@defines_module) 121 | return @defines_module = true if build_as_framework? 122 | 123 | @defines_module = PBXHelper.defines_module?(target) 124 | end 125 | 126 | def context 127 | TargetContext.new(build_root, 128 | temp_dir, 129 | hmap_root, 130 | temp_name, 131 | build_dir, 132 | product_name, 133 | full_product_name, 134 | defines_module?, 135 | build_as_framework_swift?) 136 | end 137 | end 138 | end 139 | end 140 | -------------------------------------------------------------------------------- /lib/hmap/xc/target/target_vfs.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'yaml_vfs' 4 | 5 | module HMap 6 | class TargetVFSEntry 7 | attr_reader :real_path, :virtual_path 8 | 9 | def initialize(build_dir, file) 10 | @real_path = file 11 | @virtual_path = File.join(build_dir, File.basename(file)) 12 | end 13 | 14 | def eql?(other) 15 | other.real_path == real_path && other.virtual_path == virtual_path 16 | end 17 | end 18 | 19 | class TargetPlatformVFS 20 | def initialize(platform, setting) 21 | @platform = platform 22 | @setting = setting 23 | end 24 | 25 | def product_name 26 | File.basename(build_dir, '.*') 27 | end 28 | 29 | def build_dir 30 | @setting.build_path(@platform) 31 | end 32 | 33 | def temp_dir 34 | @setting.temp_path(@platform) 35 | end 36 | 37 | def defines_modules? 38 | @setting.defines_modules? 39 | end 40 | 41 | def module_path 42 | File.join(temp_dir, 'module.modulemap') if defines_modules? 43 | end 44 | 45 | def private_module_path 46 | File.join(temp_dir, 'module.private.modulemap') if defines_modules? 47 | end 48 | 49 | def swift_header_path 50 | File.join(build_dir, 'Headers', "#{product_name}-Swift.h") if @setting.build_as_framework_swift? 51 | end 52 | 53 | def public_headers_dir 54 | File.join(build_dir, 'Headers') 55 | end 56 | 57 | def private_headers_dir 58 | File.join(build_dir, 'PrivateHeaders') 59 | end 60 | 61 | def module_dir 62 | File.join(build_dir, 'Modules') 63 | end 64 | end 65 | 66 | # A collection of Each TargetVFSEntry 67 | class TargetVFS 68 | def initialize(public_headers, private_headers, platforms, setting) 69 | @setting = setting 70 | @platforms = platforms 71 | @public_headers = public_headers 72 | @private_headers = private_headers 73 | end 74 | 75 | def add_headers_modules(config) 76 | r_public_paths = [] 77 | r_public_paths += @public_headers 78 | s_h = config.swift_header_path 79 | r_public_paths << s_h unless s_h.nil? 80 | r_private_paths = [] 81 | r_private_paths += @private_headers 82 | headers = [] 83 | headers += add_files(r_public_paths, config.public_headers_dir) 84 | headers += add_files(r_private_paths, config.private_headers_dir) 85 | modules_real_paths = [] 86 | if config.defines_modules? 87 | modules_real_paths << config.module_path 88 | modules_real_paths << config.private_module_path unless r_private_paths.empty? 89 | end 90 | headers += add_files(modules_real_paths, config.module_dir) || [] 91 | headers 92 | end 93 | 94 | def add_files(files, virtual_dir) 95 | return if files.nil? 96 | 97 | files.map { |file| TargetVFSEntry.new(virtual_dir, file) } 98 | end 99 | 100 | def vfs_entrys 101 | Hash[@platforms.map do |platform| 102 | config = TargetPlatformVFS.new(platform, @setting) 103 | [platform.to_s, add_headers_modules(config)] 104 | end] 105 | end 106 | end 107 | 108 | class TargetVFSWriter 109 | attr_reader :entrys 110 | 111 | def initialize(entrys) 112 | @entrys = entrys 113 | end 114 | 115 | def write!(path) 116 | es = @entrys.map do |entry| 117 | VFS::FileCollectorEntry.new(entry.real_path, entry.virtual_path) 118 | end.uniq 119 | fc = VFS::FileCollector.new(es) 120 | pa = Pathname.new(path) 121 | pa.dirname.mkpath unless pa.exist? 122 | fc.write_mapping(pa) 123 | end 124 | end 125 | end 126 | -------------------------------------------------------------------------------- /lib/hmap/xc/target/xcconfig_helper.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require_relative 'xcconfig' 4 | 5 | module HMap 6 | # A collection of xcodeproj Helper functions used throughout hmap. 7 | class XcodeprojHelper 8 | HMAP_XCKEY_START = 'HMAP_' 9 | SAVE_XCKEY_START = 'SAVE_' 10 | private_constant :HMAP_XCKEY_START, :SAVE_XCKEY_START 11 | 12 | attr_reader :xcconfig_path 13 | 14 | def initialize(path) 15 | xc = Pathname(path) 16 | @xcconfig_path = xc 17 | @xcconfig = XCConfig.new(xc) 18 | end 19 | 20 | def add_build_settings_and_save(settings, use_origin: true) 21 | add_build_settings(settings, use_origin) 22 | if use_origin 23 | remove_build_settings(settings) 24 | else 25 | save_build_settings(settings) 26 | end 27 | save_as 28 | end 29 | 30 | def add_build_settings(settings, use_origin) 31 | settings.each do |key, value| 32 | add_build_setting(key.to_s, value, use_origin) 33 | end 34 | end 35 | 36 | def add_build_setting(key, value, use_origin) 37 | return if value.nil? 38 | 39 | if key.start_with?(HMAP_XCKEY_START) 40 | @xcconfig.attributes[key] = value 41 | else 42 | save_origin = save_build_setting(key) 43 | value = "#{value} ${#{save_xckey(key)}} " if use_origin && !save_origin.nil? 44 | @xcconfig.attributes[hmap_xckey(key)] = value 45 | h_value = "${#{hmap_xckey(key)}}" 46 | h_value += ' $(inherited)' unless key == Constants::USE_HEADERMAP 47 | @xcconfig.attributes[key] = h_value 48 | end 49 | end 50 | 51 | def save_build_settings(settings) 52 | settings ||= [] 53 | settings.each { |key| save_build_setting(key) } 54 | end 55 | 56 | def save_build_setting(key) 57 | origin = @xcconfig.attributes[key] 58 | if origin.nil? || !origin.include?(hmap_xckey(key)) 59 | @xcconfig.attributes[save_xckey(key)] = origin unless origin.nil? 60 | @xcconfig.attributes.delete(key) 61 | end 62 | @xcconfig.attributes[save_xckey(key)] 63 | end 64 | 65 | def remove_build_settings_and_save 66 | hmap_ks = @xcconfig.attributes.keys.each_with_object([]) do |key, sum| 67 | sum << key[HMAP_XCKEY_START.length..] if key.start_with?(HMAP_XCKEY_START) 68 | sum << key[SAVE_XCKEY_START.length..] if key.start_with?(SAVE_XCKEY_START) 69 | end.compact 70 | remove_build_settings(hmap_ks) 71 | save_as 72 | end 73 | 74 | def remove_build_settings(settings) 75 | settings ||= [] 76 | settings.each { |setting| remove_build_setting(setting) } 77 | end 78 | 79 | def remove_build_setting(setting) 80 | save_origin = @xcconfig.attributes[save_xckey(setting)] 81 | origin = @xcconfig.attributes[setting] 82 | @xcconfig.attributes.delete(setting) if save_origin.nil? && !origin.nil? && origin.include?(hmap_xckey(setting)) 83 | @xcconfig.attributes[setting] = save_origin unless save_origin.nil? 84 | @xcconfig.attributes.delete(hmap_xckey(setting)) 85 | @xcconfig.attributes.delete(save_xckey(setting)) 86 | end 87 | 88 | def save_as(path = nil) 89 | path = xcconfig_path if path.nil? 90 | @xcconfig.save_as(path) 91 | end 92 | 93 | private 94 | 95 | def build_setting?(key) 96 | !@xcconfig.attributes[key].nil? 97 | end 98 | 99 | def hmap_xckey(key) 100 | "#{HMAP_XCKEY_START}#{key}" 101 | end 102 | 103 | def save_xckey(key) 104 | "#{SAVE_XCKEY_START}#{key}" 105 | end 106 | end 107 | end 108 | -------------------------------------------------------------------------------- /lib/hmap/xc/workspace/project.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'hmap/xc/workspace/project_helper' 4 | require 'hmap/xc/target/target' 5 | 6 | module HMap 7 | HEADER_FILES_EXTENSIONS = %w[.h .hh .hpp .ipp .tpp .hxx .def .inl .inc .pch] 8 | 9 | class Project 10 | include HMap::Project::Helper 11 | 12 | attr_reader :project, :workspace 13 | 14 | def initialize(project, workspace) 15 | @project = project 16 | @workspace = workspace 17 | end 18 | 19 | def platforms 20 | return @platforms if defined? @platforms 21 | 22 | build_configurations = project.build_configuration_list.build_configurations 23 | build_configurations += project.targets.flat_map do |target| 24 | target.build_configuration_list.build_configurations 25 | end 26 | 27 | ps = build_configurations.flatten.each_with_object({}) do |configuration, sum| 28 | bs = configuration.build_settings 29 | d_t = [] 30 | d_t << :osx unless bs['MACOSX_DEPLOYMENT_TARGET'].nil? 31 | d_t << :ios unless bs['IPHONEOS_DEPLOYMENT_TARGET'].nil? 32 | d_t << :watchos unless bs['WATCHOS_DEPLOYMENT_TARGET'].nil? 33 | d_t << :tvos unless bs['TVOS_DEPLOYMENT_TARGET'].nil? 34 | sum[configuration.name] ||= [] 35 | sum[configuration.name] += d_t unless d_t.empty? 36 | end 37 | 38 | @platforms = ps.flat_map do |key, value| 39 | Platform.new_from_platforms(key, value.uniq) 40 | end 41 | end 42 | 43 | def targets 44 | return @targets if defined?(@targets) 45 | 46 | project_dir = project.project_dir 47 | 48 | h_ts = project.targets.map do |target| 49 | next if target.is_a?(Constants::PBXAggregateTarget) 50 | 51 | headers = target.build_phases.flat_map do |phase| 52 | next unless phase.is_a?(Constants::PBXHeadersBuildPhase) 53 | 54 | phase.files.flat_map do |file| 55 | ff = file.file_ref 56 | f_path = ff.instance_variable_get('@simple_attributes_hash')['path'] || '' 57 | g_path = PBXHelper.group_paths(ff) 58 | header_entry(project_dir, g_path, f_path, file) 59 | end 60 | end.compact 61 | Target.new(headers, target, self) 62 | end.compact 63 | @targets = h_ts || [] 64 | end 65 | 66 | def write_hmapfile! 67 | hmap_writer = BuildSettingsWriter.new(platforms, context) 68 | types = %i[all_non_framework_target_headers project_headers all_target_headers all_product_headers] 69 | datas = headers_hash(*types) 70 | hmap_writer.write_or_symlink(nil, datas, %i[all_product_headers]) 71 | targets.each do |target| 72 | target.write_hmapfile! 73 | UserInterface.puts("[hmapfile] #{target.target_name} hmap files generated".green) 74 | end 75 | UserInterface.puts("[hmapfile] There are #{targets.length} targets hmap files generated") 76 | end 77 | 78 | def save_hmap_settings! 79 | targets.each(&:save_hmap_settings!) 80 | end 81 | 82 | def remove_hmap_settings! 83 | targets.each(&:remove_hmap_settings!) 84 | end 85 | 86 | private 87 | 88 | def header_entry(project_dir, group, file, xc) 89 | settings_h = xc.instance_variable_get('@simple_attributes_hash') || {} 90 | settings = settings_h['settings'] || {} 91 | attributes = settings['ATTRIBUTES'] 92 | full_path = File.expand_path(File.join(project_dir, group, file)) 93 | extra_headers = [] 94 | extra_headers << File.join(group, file) 95 | extra_headers << File.join(file) 96 | extra_headers.uniq! 97 | types = %i[Public Private Project] 98 | attributes = 'Project' if attributes.nil? 99 | ts = types.select { |type| attributes.include?(type.to_s) } 100 | ts.map { |t| HeaderEntry.new(full_path, extra_headers, t) } 101 | end 102 | 103 | def entrys 104 | return @entrys if defined?(@entrys) 105 | 106 | project_dir = project.project_dir 107 | @entrys = project.objects_by_uuid.flat_map do |_uuid, ff| 108 | next unless ff.is_a?(Constants::PBXFileReference) 109 | 110 | f_path = ff.instance_variable_get('@simple_attributes_hash')['path'] || '' 111 | next unless HEADER_FILES_EXTENSIONS.include?(File.extname(f_path)) 112 | 113 | builds = ff.referrers.select { |e| e.is_a?(Constants::PBXBuildFile) } || [] 114 | g_path = PBXHelper.group_paths(ff) 115 | if builds.empty? 116 | header_entry(project_dir, g_path, f_path, nil) 117 | else 118 | builds.flat_map { |bf| header_entry(project_dir, g_path, f_path, bf) } 119 | end 120 | end.compact 121 | end 122 | end 123 | end 124 | -------------------------------------------------------------------------------- /lib/hmap/xc/workspace/project_helper.rb: -------------------------------------------------------------------------------- 1 | require 'hmap/xc/header_type' 2 | require 'hmap/xc/context' 3 | 4 | module HMap 5 | class Project 6 | module Helper 7 | include HMap::HeaderType 8 | 9 | define_method(:all_product_headers) do 10 | return @all_product_headers if defined? @all_product_headers 11 | 12 | hs = targets.each_with_object({}) do |target, sum| 13 | next if target.all_product_headers.nil? 14 | 15 | sum.merge!(target.all_product_headers) { |_, oldval, newval| newval + oldval } 16 | end 17 | 18 | if targets.any?(&:app_target?) 19 | workspace.projects.each do |pr| 20 | next if pr == self 21 | 22 | hs.merge!(pr.all_product_headers) { |_, v1, v2| v1 + v2 } 23 | end 24 | end 25 | @all_product_headers = hs 26 | end 27 | 28 | define_method(:all_non_framework_target_headers) do 29 | return @all_non_framework_target_headers if defined?(@all_non_framework_target_headers) 30 | 31 | @all_non_framework_target_headers = targets.inject({}) do |sum, entry| 32 | sum.merge!(entry.all_non_framework_target_headers || {}) { |_, v1, _| v1 } 33 | end 34 | end 35 | 36 | # all_targets include header full module path 37 | define_method(:all_target_headers) do 38 | return @all_target_headers if defined?(@all_target_headers) 39 | 40 | @all_target_headers = workspace.all_target_headers 41 | end 42 | 43 | define_method(:project_headers) do 44 | return @project_headers if defined?(@project_headers) 45 | 46 | hs = targets.inject({}) do |sum, entry| 47 | sum.merge!(entry.project_headers) { |_, v1, _| v1 } 48 | end 49 | if targets.any?(&:app_target?) 50 | workspace.projects.each do |pr| 51 | next if pr == self 52 | 53 | hs.merge!(pr.project_headers) { |_, v1, _| v1 } 54 | end 55 | end 56 | @project_headers = project_entrys.inject(hs) do |sum, entry| 57 | sum.merge!(entry.project_buckets_extra) { |_, v1, _| v1 } 58 | end 59 | end 60 | 61 | def project_references 62 | return @project_references if defined? @project_references 63 | 64 | project_references = PBXHelper.project_references(project) 65 | @project_references = project_references.map { |pr| Project.new(pr, workspace) } 66 | end 67 | 68 | def temp_name 69 | "#{project_name}.build" 70 | end 71 | 72 | def build_dir() end 73 | 74 | def project_name 75 | project.root_object.name 76 | end 77 | 78 | def project_dir 79 | project.project_dir 80 | end 81 | 82 | def build_root 83 | workspace.build_root 84 | end 85 | 86 | def temp_dir 87 | File.join(workspace.obj_root, temp_name) 88 | end 89 | 90 | def hmap_root 91 | # File.join(workspace.hmap_root, temp_name) 92 | File.join(project_dir, Constants::HMAP_DIR, temp_name) 93 | end 94 | 95 | def build_data_dir 96 | Constants::XC_BUILD_DATA 97 | end 98 | 99 | def context 100 | HMap::Context.new(build_root, 101 | temp_dir, 102 | File.join(hmap_root, build_data_dir), 103 | '', 104 | build_dir) 105 | end 106 | end 107 | end 108 | end 109 | -------------------------------------------------------------------------------- /lib/hmap/xc/workspace/workspace.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require 'hmap/xc/product_helper' 4 | require 'hmap/xc/workspace/project' 5 | require 'hmap/xc/pbx_helper' 6 | 7 | module HMap 8 | class Workspace 9 | attr_reader :save_setting, :projects 10 | 11 | def self.new_from_xcworkspaces(paths) 12 | paths.flat_map do |path| 13 | xc = Xcodeproj::Workspace.new_from_xcworkspace(path) 14 | schemes = xc.schemes.values.uniq || [] 15 | ss = WorkspaceProductPath.new(path) 16 | projects = PBXHelper.projects(*schemes) 17 | new(ss, projects) 18 | end 19 | end 20 | 21 | def self.new_from_xcprojects(paths) 22 | paths.map do |path| 23 | ss = ProjectProductPath.new(path) 24 | projects = PBXHelper.projects(path) 25 | new(ss, projects) 26 | end 27 | end 28 | 29 | def initialize(save_setting, projects) 30 | @save_setting = save_setting 31 | @projects = projects.map { |project| Project.new(project, self) } 32 | end 33 | 34 | def build_root 35 | save_setting.build_root 36 | end 37 | 38 | def obj_root 39 | save_setting.obj_root 40 | end 41 | 42 | def name 43 | save_setting.name 44 | end 45 | 46 | def workspace_dir 47 | File.dirname(save_setting.path) 48 | end 49 | 50 | def hmap_root 51 | # dir = build_root.dirname.dirname 52 | dir = workspace_dir 53 | File.join(dir, Constants::HMAP_DIR) 54 | end 55 | 56 | def write_save! 57 | UserInterface.puts('[hmapfile] Got workspace/project build directory') 58 | UserInterface.puts("[hmapfile] #{name} hmapfile gen directory: #{hmap_root} ") 59 | write_hmapfile! 60 | save_hmap_settings! 61 | end 62 | 63 | def write_hmapfile! 64 | UserInterface.puts('[hmapfile] Starting generate hmap file') 65 | projects.each(&:write_hmapfile!) 66 | end 67 | 68 | def save_hmap_settings! 69 | UserInterface.puts('[hmapfile] Saving hmap settings') 70 | 71 | projects.each(&:save_hmap_settings!) 72 | end 73 | 74 | def remove_hmap_settings! 75 | UserInterface.puts('[hmapfile] Cleanning hmap settings') 76 | FileUtils.rm_rf(hmap_root) if Dir.exist?(hmap_root) 77 | projects.each(&:remove_hmap_settings!) 78 | end 79 | 80 | def all_target_headers 81 | @projects.flat_map(&:targets).inject({}) do |sum, entry| 82 | sum.merge!(entry.all_target_headers) { |_, v1, _| v1 } 83 | end 84 | end 85 | 86 | def xcconfig_paths 87 | return @xcconfig_paths if defined?(@xcconfig_paths) 88 | 89 | @xcconfig_paths = projects.flat_map do |project| 90 | project.targets.flat_map do |target| 91 | target.target.build_configurations.map do |configuration| 92 | next unless configuration.is_a?(Constants::XCBuildConfiguration) 93 | 94 | bcr = configuration.base_configuration_reference 95 | next if bcr.nil? 96 | 97 | s_path = PBXHelper.group_paths(bcr) 98 | x = bcr.instance_variable_get('@simple_attributes_hash')['path'] || '' 99 | path = File.expand_path(File.join(project.project_dir, s_path, x)) 100 | target.xcconfig_paths << path 101 | path 102 | end.compact 103 | end 104 | end.uniq 105 | end 106 | end 107 | end 108 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphoneos/LGApp-dev.build/LGApp_cat-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphoneos/LGApp-dev.build/LGApp_cat-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphoneos/LGApp-dev.build/LGApp_cat-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphoneos/LGApp-dev.build/LGApp_cat-own-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphoneos/LGApp-dev.build/LGApp_cat-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphoneos/LGApp-dev.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/Debug copy-iphoneos/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphoneos/LGApp.build/LGApp-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphoneos/LGApp.build/LGApp-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphoneos/LGApp.build/LGApp-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphoneos/LGApp.build/LGApp-own-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphoneos/LGApp.build/LGApp-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphoneos/LGApp.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/Debug copy-iphoneos/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphoneos/TestNoo.build/TestNoo-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphoneos/TestNoo.build/TestNoo-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphoneos/TestNoo.build/TestNoo-own-target-headers.hmap: -------------------------------------------------------------------------------- 1 | pamhx -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphoneos/TestNoo.build/TestNoo-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphoneos/TestNoo.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/Debug copy-iphoneos/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphonesimulator/LGApp-dev.build/LGApp_cat-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphonesimulator/LGApp-dev.build/LGApp_cat-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphonesimulator/LGApp-dev.build/LGApp_cat-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphonesimulator/LGApp-dev.build/LGApp_cat-own-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphonesimulator/LGApp-dev.build/LGApp_cat-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphonesimulator/LGApp-dev.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/Debug copy-iphonesimulator/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphonesimulator/LGApp.build/LGApp-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphonesimulator/LGApp.build/LGApp-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphonesimulator/LGApp.build/LGApp-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphonesimulator/LGApp.build/LGApp-own-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphonesimulator/LGApp.build/LGApp-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphonesimulator/LGApp.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/Debug copy-iphonesimulator/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphonesimulator/TestNoo.build/TestNoo-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphonesimulator/TestNoo.build/TestNoo-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphonesimulator/TestNoo.build/TestNoo-own-target-headers.hmap: -------------------------------------------------------------------------------- 1 | pamhx -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphonesimulator/TestNoo.build/TestNoo-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug copy-iphonesimulator/TestNoo.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/Debug copy-iphonesimulator/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphoneos/LGApp-dev.build/LGApp_cat-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphoneos/LGApp-dev.build/LGApp_cat-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphoneos/LGApp-dev.build/LGApp_cat-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphoneos/LGApp-dev.build/LGApp_cat-own-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphoneos/LGApp-dev.build/LGApp_cat-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphoneos/LGApp-dev.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/Debug-iphoneos/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphoneos/LGApp.build/LGApp-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphoneos/LGApp.build/LGApp-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphoneos/LGApp.build/LGApp-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphoneos/LGApp.build/LGApp-own-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphoneos/LGApp.build/LGApp-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphoneos/LGApp.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/Debug-iphoneos/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphoneos/TestNoo.build/TestNoo-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphoneos/TestNoo.build/TestNoo-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphoneos/TestNoo.build/TestNoo-own-target-headers.hmap: -------------------------------------------------------------------------------- 1 | pamhx -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphoneos/TestNoo.build/TestNoo-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphoneos/TestNoo.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/Debug-iphoneos/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphonesimulator/LGApp-dev.build/LGApp_cat-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphonesimulator/LGApp-dev.build/LGApp_cat-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphonesimulator/LGApp-dev.build/LGApp_cat-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphonesimulator/LGApp-dev.build/LGApp_cat-own-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphonesimulator/LGApp-dev.build/LGApp_cat-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphonesimulator/LGApp-dev.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/Debug-iphonesimulator/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphonesimulator/LGApp.build/LGApp-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphonesimulator/LGApp.build/LGApp-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphonesimulator/LGApp.build/LGApp-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphonesimulator/LGApp.build/LGApp-own-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphonesimulator/LGApp.build/LGApp-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphonesimulator/LGApp.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/Debug-iphonesimulator/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphonesimulator/TestNoo.build/TestNoo-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphonesimulator/TestNoo.build/TestNoo-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphonesimulator/TestNoo.build/TestNoo-own-target-headers.hmap: -------------------------------------------------------------------------------- 1 | pamhx -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphonesimulator/TestNoo.build/TestNoo-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Debug-iphonesimulator/TestNoo.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/Debug-iphonesimulator/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphoneos/LGApp-dev.build/LGApp_cat-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphoneos/LGApp-dev.build/LGApp_cat-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphoneos/LGApp-dev.build/LGApp_cat-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphoneos/LGApp-dev.build/LGApp_cat-own-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphoneos/LGApp-dev.build/LGApp_cat-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphoneos/LGApp-dev.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/Release-iphoneos/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphoneos/LGApp.build/LGApp-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphoneos/LGApp.build/LGApp-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphoneos/LGApp.build/LGApp-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphoneos/LGApp.build/LGApp-own-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphoneos/LGApp.build/LGApp-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphoneos/LGApp.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/Release-iphoneos/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphoneos/TestNoo.build/TestNoo-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphoneos/TestNoo.build/TestNoo-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphoneos/TestNoo.build/TestNoo-own-target-headers.hmap: -------------------------------------------------------------------------------- 1 | pamhx -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphoneos/TestNoo.build/TestNoo-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphoneos/TestNoo.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/Release-iphoneos/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphonesimulator/LGApp-dev.build/LGApp_cat-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphonesimulator/LGApp-dev.build/LGApp_cat-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphonesimulator/LGApp-dev.build/LGApp_cat-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphonesimulator/LGApp-dev.build/LGApp_cat-own-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphonesimulator/LGApp-dev.build/LGApp_cat-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphonesimulator/LGApp-dev.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/Release-iphonesimulator/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphonesimulator/LGApp.build/LGApp-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphonesimulator/LGApp.build/LGApp-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphonesimulator/LGApp.build/LGApp-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphonesimulator/LGApp.build/LGApp-own-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphonesimulator/LGApp.build/LGApp-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphonesimulator/LGApp.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/Release-iphonesimulator/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphonesimulator/TestNoo.build/TestNoo-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphonesimulator/TestNoo.build/TestNoo-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphonesimulator/TestNoo.build/TestNoo-own-target-headers.hmap: -------------------------------------------------------------------------------- 1 | pamhx -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphonesimulator/TestNoo.build/TestNoo-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/Release-iphonesimulator/TestNoo.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/Release-iphonesimulator/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | pamhxdLGApp_cat/AppDelegate.h/Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/Source/AppDelegate.h -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/HMap/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp copy-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | $(MARKETING_VERSION) 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UIApplicationSceneManifest 24 | 25 | UIApplicationSupportsMultipleScenes 26 | 27 | UISceneConfigurations 28 | 29 | UIWindowSceneSessionRoleApplication 30 | 31 | 32 | UISceneConfigurationName 33 | Default Configuration 34 | UISceneDelegateClassName 35 | SceneDelegate 36 | UISceneStoryboardFile 37 | Main 38 | 39 | 40 | 41 | 42 | UIApplicationSupportsIndirectInputEvents 43 | 44 | UILaunchStoryboardName 45 | LaunchScreen 46 | UIMainStoryboardFile 47 | Main 48 | UIRequiredDeviceCapabilities 49 | 50 | armv7 51 | 52 | UISupportedInterfaceOrientations 53 | 54 | UIInterfaceOrientationPortrait 55 | UIInterfaceOrientationLandscapeLeft 56 | UIInterfaceOrientationLandscapeRight 57 | 58 | UISupportedInterfaceOrientations~ipad 59 | 60 | UIInterfaceOrientationPortrait 61 | UIInterfaceOrientationPortraitUpsideDown 62 | UIInterfaceOrientationLandscapeLeft 63 | UIInterfaceOrientationLandscapeRight 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphoneos/LGApp.build/LGApp-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphoneos/LGApp.build/LGApp-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphoneos/LGApp.build/LGApp-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphoneos/LGApp.build/LGApp-own-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphoneos/LGApp.build/LGApp-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphoneos/LGApp.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/Debug copy-iphoneos/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphoneos/TestNoo.build/TestNoo-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphoneos/TestNoo.build/TestNoo-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphoneos/TestNoo.build/TestNoo-own-target-headers.hmap: -------------------------------------------------------------------------------- 1 | pamhx -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphoneos/TestNoo.build/TestNoo-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphoneos/TestNoo.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/Debug copy-iphoneos/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphonesimulator/LGApp.build/LGApp-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphonesimulator/LGApp.build/LGApp-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphonesimulator/LGApp.build/LGApp-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphonesimulator/LGApp.build/LGApp-own-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphonesimulator/LGApp.build/LGApp-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphonesimulator/LGApp.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/Debug copy-iphonesimulator/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphonesimulator/TestNoo.build/TestNoo-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphonesimulator/TestNoo.build/TestNoo-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphonesimulator/TestNoo.build/TestNoo-own-target-headers.hmap: -------------------------------------------------------------------------------- 1 | pamhx -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphonesimulator/TestNoo.build/TestNoo-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug copy-iphonesimulator/TestNoo.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/Debug copy-iphonesimulator/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphoneos/LGApp.build/LGApp-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphoneos/LGApp.build/LGApp-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphoneos/LGApp.build/LGApp-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/LGApp.build/Debug-iphoneos/LGApp.build/LGApp-own-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphoneos/LGApp.build/LGApp-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphoneos/LGApp.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/Debug-iphoneos/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphoneos/TestNoo.build/TestNoo-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphoneos/TestNoo.build/TestNoo-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphoneos/TestNoo.build/TestNoo-own-target-headers.hmap: -------------------------------------------------------------------------------- 1 | pamhx -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphoneos/TestNoo.build/TestNoo-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphoneos/TestNoo.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/Debug-iphoneos/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphonesimulator/LGApp.build/LGApp-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphonesimulator/LGApp.build/LGApp-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphonesimulator/LGApp.build/LGApp-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/LGApp.build/Debug-iphonesimulator/LGApp.build/LGApp-own-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphonesimulator/LGApp.build/LGApp-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphonesimulator/LGApp.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/Debug-iphonesimulator/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphonesimulator/TestNoo.build/TestNoo-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphonesimulator/TestNoo.build/TestNoo-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphonesimulator/TestNoo.build/TestNoo-own-target-headers.hmap: -------------------------------------------------------------------------------- 1 | pamhx -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphonesimulator/TestNoo.build/TestNoo-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Debug-iphonesimulator/TestNoo.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/Debug-iphonesimulator/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphoneos/LGApp.build/LGApp-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphoneos/LGApp.build/LGApp-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphoneos/LGApp.build/LGApp-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/LGApp.build/Release-iphoneos/LGApp.build/LGApp-own-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphoneos/LGApp.build/LGApp-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphoneos/LGApp.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/Release-iphoneos/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphoneos/TestNoo.build/TestNoo-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphoneos/TestNoo.build/TestNoo-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphoneos/TestNoo.build/TestNoo-own-target-headers.hmap: -------------------------------------------------------------------------------- 1 | pamhx -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphoneos/TestNoo.build/TestNoo-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphoneos/TestNoo.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/Release-iphoneos/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphonesimulator/LGApp.build/LGApp-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphonesimulator/LGApp.build/LGApp-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphonesimulator/LGApp.build/LGApp-own-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/LGApp.build/Release-iphonesimulator/LGApp.build/LGApp-own-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphonesimulator/LGApp.build/LGApp-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphonesimulator/LGApp.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/Release-iphonesimulator/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphonesimulator/TestNoo.build/TestNoo-all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphonesimulator/TestNoo.build/TestNoo-all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphonesimulator/TestNoo.build/TestNoo-own-target-headers.hmap: -------------------------------------------------------------------------------- 1 | pamhx -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphonesimulator/TestNoo.build/TestNoo-project-headers.hmap: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/Release-iphonesimulator/TestNoo.build/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/Release-iphonesimulator/all-product-headers.yaml -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/Debug copy-iphoneos/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | {"case-sensitive":"false","roots":[],"version":0} -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/Debug copy-iphonesimulator/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | {"case-sensitive":"false","roots":[],"version":0} -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/Debug-iphoneos/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | {"case-sensitive":"false","roots":[],"version":0} -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/Debug-iphonesimulator/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | {"case-sensitive":"false","roots":[],"version":0} -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/Release-iphoneos/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | {"case-sensitive":"false","roots":[],"version":0} -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/Release-iphonesimulator/all-product-headers.yaml: -------------------------------------------------------------------------------- 1 | {"case-sensitive":"false","roots":[],"version":0} -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-non-framework-target-headers.hmap: -------------------------------------------------------------------------------- 1 | pamhx -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-target-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/all-target-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/project-headers.hmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/LGApp.build/XCBuildData/project-headers.hmap -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.xcodeproj/xcshareddata/xcschemes/LGApp-Test.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 45 | 51 | 52 | 53 | 54 | 60 | 62 | 68 | 69 | 70 | 71 | 73 | 74 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.xcodeproj/xcshareddata/xcschemes/LGApp.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 45 | 51 | 52 | 53 | 54 | 60 | 62 | 68 | 69 | 70 | 71 | 73 | 74 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.xcodeproj/xcshareddata/xcschemes/TestNoo.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 6 | 9 | 10 | 16 | 22 | 23 | 24 | 30 | 36 | 37 | 38 | 39 | 40 | 45 | 46 | 47 | 48 | 60 | 62 | 68 | 69 | 70 | 71 | 78 | 80 | 86 | 87 | 88 | 89 | 91 | 92 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/LGApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/Podfile: -------------------------------------------------------------------------------- 1 | source 'https://github.com/CocoaPods/Specs' 2 | 3 | platform :ios, '9.0' 4 | # install! 'cocoapods', generate_multiple_pod_projects: true 5 | 6 | # plugin 'cocoapods-mapfile' 7 | 8 | target 'LGApp' do 9 | use_frameworks! :linkage =>:static 10 | pod 'AFNetworking' 11 | pod 'GoogleUtilities' 12 | pod 'MagicalRecord' 13 | pod 'CocoaLumberjack' 14 | pod 'IGListKit' 15 | # pod 'WCDB.swift' 16 | pod 'FBSDKShareKit' 17 | pod 'Realm' 18 | pod 'YYKit' 19 | pod 'Kingfisher' 20 | pod 'iOS-Echarts', '~>1.4.4' 21 | end 22 | 23 | # target 'TestNoo' do 24 | # use_frameworks! 25 | # 26 | # end 27 | 28 | # pod 'lottie-ios', '~> 2.5.3' 29 | # pod 'MeshPipe/CerfingMeshPipe' 30 | # pod 'AFNetworking' 31 | # pod 'SDWebImage' 32 | # pod 'Kingfisher' 33 | # :linkage => :static 34 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - AFNetworking (4.0.1): 3 | - AFNetworking/NSURLSession (= 4.0.1) 4 | - AFNetworking/Reachability (= 4.0.1) 5 | - AFNetworking/Security (= 4.0.1) 6 | - AFNetworking/Serialization (= 4.0.1) 7 | - AFNetworking/UIKit (= 4.0.1) 8 | - AFNetworking/NSURLSession (4.0.1): 9 | - AFNetworking/Reachability 10 | - AFNetworking/Security 11 | - AFNetworking/Serialization 12 | - AFNetworking/Reachability (4.0.1) 13 | - AFNetworking/Security (4.0.1) 14 | - AFNetworking/Serialization (4.0.1) 15 | - AFNetworking/UIKit (4.0.1): 16 | - AFNetworking/NSURLSession 17 | - CocoaLumberjack (3.7.4): 18 | - CocoaLumberjack/Core (= 3.7.4) 19 | - CocoaLumberjack/Core (3.7.4) 20 | - FBAEMKit (12.0.2): 21 | - FBSDKCoreKit_Basics (= 12.0.2) 22 | - FBSDKCoreKit (12.0.2): 23 | - FBAEMKit (= 12.0.2) 24 | - FBSDKCoreKit_Basics (= 12.0.2) 25 | - FBSDKCoreKit_Basics (12.0.2) 26 | - FBSDKShareKit (12.0.2): 27 | - FBSDKCoreKit (= 12.0.2) 28 | - GoogleUtilities (7.7.0): 29 | - GoogleUtilities/AppDelegateSwizzler (= 7.7.0) 30 | - GoogleUtilities/Environment (= 7.7.0) 31 | - GoogleUtilities/ISASwizzler (= 7.7.0) 32 | - GoogleUtilities/Logger (= 7.7.0) 33 | - GoogleUtilities/MethodSwizzler (= 7.7.0) 34 | - GoogleUtilities/Network (= 7.7.0) 35 | - "GoogleUtilities/NSData+zlib (= 7.7.0)" 36 | - GoogleUtilities/Reachability (= 7.7.0) 37 | - GoogleUtilities/SwizzlerTestHelpers (= 7.7.0) 38 | - GoogleUtilities/UserDefaults (= 7.7.0) 39 | - GoogleUtilities/AppDelegateSwizzler (7.7.0): 40 | - GoogleUtilities/Environment 41 | - GoogleUtilities/Logger 42 | - GoogleUtilities/Network 43 | - GoogleUtilities/Environment (7.7.0): 44 | - PromisesObjC (< 3.0, >= 1.2) 45 | - GoogleUtilities/ISASwizzler (7.7.0) 46 | - GoogleUtilities/Logger (7.7.0): 47 | - GoogleUtilities/Environment 48 | - GoogleUtilities/MethodSwizzler (7.7.0): 49 | - GoogleUtilities/Logger 50 | - GoogleUtilities/Network (7.7.0): 51 | - GoogleUtilities/Logger 52 | - "GoogleUtilities/NSData+zlib" 53 | - GoogleUtilities/Reachability 54 | - "GoogleUtilities/NSData+zlib (7.7.0)" 55 | - GoogleUtilities/Reachability (7.7.0): 56 | - GoogleUtilities/Logger 57 | - GoogleUtilities/SwizzlerTestHelpers (7.7.0): 58 | - GoogleUtilities/MethodSwizzler 59 | - GoogleUtilities/UserDefaults (7.7.0): 60 | - GoogleUtilities/Logger 61 | - IGListDiffKit (4.0.0) 62 | - IGListKit (4.0.0): 63 | - IGListDiffKit (= 4.0.0) 64 | - iOS-Echarts (1.4.4) 65 | - Kingfisher (4.10.1) 66 | - MagicalRecord (2.3.2): 67 | - MagicalRecord/Core (= 2.3.2) 68 | - MagicalRecord/Core (2.3.2) 69 | - PromisesObjC (2.1.0) 70 | - Realm (10.26.0): 71 | - Realm/Headers (= 10.26.0) 72 | - Realm/Headers (10.26.0) 73 | - YYKit (1.0.9): 74 | - YYKit/no-arc (= 1.0.9) 75 | - YYKit/no-arc (1.0.9) 76 | 77 | DEPENDENCIES: 78 | - AFNetworking 79 | - CocoaLumberjack 80 | - FBSDKShareKit 81 | - GoogleUtilities 82 | - IGListKit 83 | - iOS-Echarts (~> 1.4.4) 84 | - Kingfisher 85 | - MagicalRecord 86 | - Realm 87 | - YYKit 88 | 89 | SPEC REPOS: 90 | https://github.com/CocoaPods/Specs.git: 91 | - AFNetworking 92 | - CocoaLumberjack 93 | - FBAEMKit 94 | - FBSDKCoreKit 95 | - FBSDKCoreKit_Basics 96 | - FBSDKShareKit 97 | - GoogleUtilities 98 | - IGListDiffKit 99 | - IGListKit 100 | - iOS-Echarts 101 | - Kingfisher 102 | - MagicalRecord 103 | - PromisesObjC 104 | - Realm 105 | - YYKit 106 | 107 | SPEC CHECKSUMS: 108 | AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce 109 | CocoaLumberjack: 543c79c114dadc3b1aba95641d8738b06b05b646 110 | FBAEMKit: c6b8ddf8371640fcd1a3b844d0f8884c8f334cea 111 | FBSDKCoreKit: 506c0fd1c09a3075f62be8fa36bdd921c563daa9 112 | FBSDKCoreKit_Basics: c0701d1634c944d60dd3c6361d66dbd0e707a456 113 | FBSDKShareKit: 4598ab1ded1a83635746f8cd681948f97ad29560 114 | GoogleUtilities: e0913149f6b0625b553d70dae12b49fc62914fd1 115 | IGListDiffKit: 665d6cf43ce726e676013db9c7d6c4294259b6b2 116 | IGListKit: fd5a5d21935298f5849fa49d426843cff97b77c7 117 | iOS-Echarts: dbc7423d861e5eedee78906a39d205b5c4da9a13 118 | Kingfisher: c148cd7b47ebde9989f6bc7c27dcaa79d81279a0 119 | MagicalRecord: 53bed74b4323b930992a725be713e53b37d19755 120 | PromisesObjC: 99b6f43f9e1044bd87a95a60beff28c2c44ddb72 121 | Realm: 97bc2540088e1e88a4b2051ba4b8eac85be0039a 122 | YYKit: 7cda43304a8dc3696c449041e2cb3107b4e236e7 123 | 124 | PODFILE CHECKSUM: fc2640fd6c1880c0670e7195fcdac4a2e6a82718 125 | 126 | COCOAPODS: 1.11.3 127 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/Source/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // LGApp 4 | // 5 | // Created by ws on 2021/8/12. 6 | // 7 | 8 | #import "AppDelegate.h" 9 | //@import AFNetworking; 10 | 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | // Override point for customization after application launch. 20 | return YES; 21 | } 22 | 23 | 24 | #pragma mark - UISceneSession lifecycle 25 | 26 | 27 | - (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options { 28 | // Called when a new scene session is being created. 29 | // Use this method to select a configuration to create the new scene with. 30 | return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role]; 31 | } 32 | 33 | 34 | - (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet *)sceneSessions { 35 | // Called when the user discards a scene session. 36 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. 37 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return. 38 | } 39 | 40 | 41 | @end 42 | /** 43 | 大厂在裁员 --》之前技术不好 --〉混--》不能 44 | 3位 --〉班级 --》 45 | */ 46 | /** 47 | clang 自编译 --〉 xcode --》替换 48 | // .h -->module -->编译 --〉 49 | // module --》解决头文件 50 | */ 51 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/Source/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/Source/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "scale" : "2x", 6 | "size" : "20x20" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "scale" : "3x", 11 | "size" : "20x20" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "scale" : "2x", 16 | "size" : "29x29" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "scale" : "3x", 21 | "size" : "29x29" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "scale" : "2x", 26 | "size" : "40x40" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "scale" : "3x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "scale" : "2x", 36 | "size" : "60x60" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "scale" : "3x", 41 | "size" : "60x60" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "scale" : "1x", 46 | "size" : "20x20" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "scale" : "2x", 51 | "size" : "20x20" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "scale" : "1x", 56 | "size" : "29x29" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "scale" : "2x", 61 | "size" : "29x29" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "scale" : "1x", 66 | "size" : "40x40" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "scale" : "2x", 71 | "size" : "40x40" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "scale" : "1x", 76 | "size" : "76x76" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "scale" : "2x", 81 | "size" : "76x76" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "scale" : "2x", 86 | "size" : "83.5x83.5" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "scale" : "1x", 91 | "size" : "1024x1024" 92 | } 93 | ], 94 | "info" : { 95 | "author" : "xcode", 96 | "version" : 1 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/Source/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/Source/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/Source/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/Source/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | $(MARKETING_VERSION) 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UIApplicationSceneManifest 24 | 25 | UIApplicationSupportsMultipleScenes 26 | 27 | UISceneConfigurations 28 | 29 | UIWindowSceneSessionRoleApplication 30 | 31 | 32 | UISceneConfigurationName 33 | Default Configuration 34 | UISceneDelegateClassName 35 | SceneDelegate 36 | UISceneStoryboardFile 37 | Main 38 | 39 | 40 | 41 | 42 | UIApplicationSupportsIndirectInputEvents 43 | 44 | UILaunchStoryboardName 45 | LaunchScreen 46 | UIMainStoryboardFile 47 | Main 48 | UIRequiredDeviceCapabilities 49 | 50 | armv7 51 | 52 | UISupportedInterfaceOrientations 53 | 54 | UIInterfaceOrientationPortrait 55 | UIInterfaceOrientationLandscapeLeft 56 | UIInterfaceOrientationLandscapeRight 57 | 58 | UISupportedInterfaceOrientations~ipad 59 | 60 | UIInterfaceOrientationPortrait 61 | UIInterfaceOrientationPortraitUpsideDown 62 | UIInterfaceOrientationLandscapeLeft 63 | UIInterfaceOrientationLandscapeRight 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/Source/LGApp-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | //#include "AppDelegate.h" 6 | #import "AFNetworking.h" 7 | 8 | /** 9 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-frontend -frontend -target x86_64-apple-ios14.5-simulator -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.2.sdk -I /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator -F /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator -F /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/AFNetworking -F /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/CocoaLumberjack -F /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/GoogleUtilities -F /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/IGListDiffKit -F /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/IGListKit -F /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/Kingfisher -F /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/MagicalRecord -F /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/PromisesObjC -F /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/Realm -F /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/YYKit -F /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/iOS-Echarts -F /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/Pods/FBAEMKit/XCFrameworks -F /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/Pods/FBSDKCoreKit/XCFrameworks -F /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/Pods/FBSDKCoreKit_Basics/XCFrameworks -F /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/Pods/FBSDKShareKit/XCFrameworks -F /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/Pods/Realm/core -F /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/Pods/YYKit/Vendor -F /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/XCFrameworkIntermediates/FBAEMKit -F /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/XCFrameworkIntermediates/FBSDKCoreKit -F /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/XCFrameworkIntermediates/FBSDKCoreKit_Basics -F /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/XCFrameworkIntermediates/FBSDKShareKit -F /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp -enable-testing -g -module-cache-path /Users/ws/Library/Developer/Xcode/DerivedData/ModuleCache.noindex -swift-version 5 -enforce-exclusivity\=checked -Onone -D COCOAPODS -new-driver-path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-driver -serialize-debugging-options -Xcc -working-directory -Xcc /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift -enable-anonymous-context-mangled-names -Xcc -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Intermediates.noindex/LGApp.build/Debug-iphonesimulator/LGApp.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Intermediates.noindex/LGApp.build/Debug-iphonesimulator/LGApp.build/LGApp-generated-files.hmap -Xcc -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Intermediates.noindex/LGApp.build/Debug-iphonesimulator/LGApp.build/LGApp-own-target-headers.hmap -Xcc -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Intermediates.noindex/LGApp.build/Debug-iphonesimulator/LGApp.build/LGApp-all-non-framework-target-headers.hmap -Xcc -ivfsoverlay -Xcc /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Intermediates.noindex/LGApp.build/Debug-iphonesimulator/LGApp.build/all-product-headers.yaml -Xcc -iquote -Xcc /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Intermediates.noindex/LGApp.build/Debug-iphonesimulator/LGApp.build/LGApp-project-headers.hmap -Xcc -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/include -Xcc -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/AFNetworking/AFNetworking.framework/Headers -Xcc -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/CocoaLumberjack/CocoaLumberjack.framework/Headers -Xcc -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/GoogleUtilities/GoogleUtilities.framework/Headers -Xcc -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/IGListDiffKit/IGListDiffKit.framework/Headers -Xcc -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/IGListKit/IGListKit.framework/Headers -Xcc -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/Kingfisher/Kingfisher.framework/Headers -Xcc -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/MagicalRecord/MagicalRecord.framework/Headers -Xcc -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/PromisesObjC/FBLPromises.framework/Headers -Xcc -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/Realm/Realm.framework/Headers -Xcc -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/YYKit/YYKit.framework/Headers -Xcc -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/iOS-Echarts/iOS_Echarts.framework/Headers -Xcc -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Products/Debug-iphonesimulator/XCFrameworkIntermediates/Realm/Headers -Xcc -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Intermediates.noindex/LGApp.build/Debug-iphonesimulator/LGApp.build/DerivedSources-normal/x86_64 -Xcc -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Intermediates.noindex/LGApp.build/Debug-iphonesimulator/LGApp.build/DerivedSources/x86_64 -Xcc -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Intermediates.noindex/LGApp.build/Debug-iphonesimulator/LGApp.build/DerivedSources -Xcc -DDEBUG\=1 -Xcc -DCOCOAPODS\=1 -import-objc-header /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/Source/LGApp-Bridging-Header.h -module-name LGApp -target-sdk-version 15.2.0 -index-store-path /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Index/DataStore -serialize-diagnostics-path /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Intermediates.noindex/PrecompiledHeaders/LGApp-Bridging-Header-3p93vwvfq3mhk.dia /Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/Source/LGApp-Bridging-Header.h -index-store-path /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Index/DataStore -emit-pch -pch-output-dir /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-fosvozugmnvzjphepojeuknaclrd/Build/Intermediates.noindex/PrecompiledHeaders 10 | 11 | */ 12 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/Source/SceneDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.h 3 | // LGApp 4 | // 5 | // Created by ws on 2021/8/12. 6 | // 7 | 8 | #import 9 | 10 | @interface SceneDelegate : UIResponder 11 | 12 | @property (strong, nonatomic) UIWindow * window; 13 | 14 | @end 15 | 16 | /** 17 | Bucket 902: Key iOS_Echarts/PYUtilities.h -> Prefix /Users/ws/Desktop/ucb_1/Pods/iOS-Echarts/iOS-Echarts/, Suffix PYUtilities.h 18 | -iquote /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-eqzwhjucjtnipogxzmevtacmrwtt/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/SQLiteRepairKit.build/sqliterk-generated-files.hmap 19 | 20 | -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-eqzwhjucjtnipogxzmevtacmrwtt/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/SQLiteRepairKit.build/sqliterk-own-target-headers.hmap 21 | 22 | -I/Users/ws/Library/Developer/Xcode/DerivedData/LGApp-eqzwhjucjtnipogxzmevtacmrwtt/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/SQLiteRepairKit.build/sqliterk-all-non-framework-target-headers.hmap 23 | 24 | -ivfsoverlay /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-eqzwhjucjtnipogxzmevtacmrwtt/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/SQLiteRepairKit.build/all-product-headers.yaml 25 | 26 | -iquote /Users/ws/Library/Developer/Xcode/DerivedData/LGApp-eqzwhjucjtnipogxzmevtacmrwtt/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/SQLiteRepairKit.build/sqliterk-project-headers.hmap 27 | */ 28 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/Source/TestSwift.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TestSwift.swift 3 | // LGApp 4 | // 5 | // Created by ws on 2021/10/8. 6 | // 7 | 8 | import Foundation 9 | 10 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/Source/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // LGApp 4 | // 5 | // Created by ws on 2021/8/12. 6 | // 7 | 8 | #import 9 | 10 | @interface ViewController : UIViewController 11 | 12 | 13 | @end 14 | 15 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/Source/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // LGApp 4 | // 5 | // Created by ws on 2021/8/12. 6 | // 7 | 8 | 9 | 10 | #import "ViewController.h" 11 | #import 12 | #import 13 | #import "GULKeychainStorage.h" 14 | //#import "WCDB-Bridging.h" 15 | //#import "iOS-Echarts.h" 16 | // vfs -> 17 | 18 | 19 | 20 | @interface ViewController () 21 | 22 | @end 23 | 24 | @implementation ViewController 25 | 26 | - (void)viewDidLoad { 27 | [super viewDidLoad]; 28 | NSLog(@"12121"); 29 | // Do any additional setup after loading the view. 30 | } 31 | 32 | 33 | @end 34 | 35 | /** 36 | xcframework 37 | 链库 --》支持多个架构 --〉不支持多个架构--》导致 --〉其他架构代码使用不了 --》 38 | */ 39 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/Source/mm/nn/Config.xcconfig: -------------------------------------------------------------------------------- 1 | //#include "../../../Pods/Target Support Files/Pods-LGApp/Pods-LGApp.debug.xcconfig" 2 | #include "/Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/Pods/Target Support Files/Pods-LGApp/Pods-LGApp.debug.xcconfig" 3 | 4 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/Source/module.modulemap: -------------------------------------------------------------------------------- 1 | module Cat { 2 | // 伞 伞柄 头文件 伞骨 3 | // umbrella header "LGModule.h" 4 | // export * 5 | // module * { export *} 6 | } 7 | 8 | // clang -fmodule-file 9 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/TestNoo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | TestNoo 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | NSExtension 24 | 25 | NSExtensionPointIdentifier 26 | com.apple.usernotifications.service 27 | NSExtensionPrincipalClass 28 | NotificationService 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/TestNoo/NotificationService.h: -------------------------------------------------------------------------------- 1 | // 2 | // NotificationService.h 3 | // TestNoo 4 | // 5 | // Created by ws on 2021/9/24. 6 | // 7 | 8 | #import 9 | #import "ViewController.h" 10 | 11 | @interface NotificationService : UNNotificationServiceExtension 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/TestNoo/NotificationService.m: -------------------------------------------------------------------------------- 1 | // 2 | // NotificationService.m 3 | // TestNoo 4 | // 5 | // Created by ws on 2021/9/24. 6 | // 7 | 8 | #import "NotificationService.h" 9 | 10 | @interface NotificationService () 11 | 12 | @property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver); 13 | @property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent; 14 | 15 | @end 16 | 17 | @implementation NotificationService 18 | 19 | + (void)load { 20 | 21 | } 22 | 23 | - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler { 24 | self.contentHandler = contentHandler; 25 | self.bestAttemptContent = [request.content mutableCopy]; 26 | // Modify the notification content here... 27 | self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title]; 28 | 29 | self.contentHandler(self.bestAttemptContent); 30 | } 31 | 32 | - (void)serviceExtensionTimeWillExpire { 33 | // Called just before the extension will be terminated by the system. 34 | // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. 35 | self.contentHandler(self.bestAttemptContent); 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/build/XCBuildData/BuildDescriptionCacheIndex-d4a851a3c5da629e163dcd03395e2069: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/build/XCBuildData/BuildDescriptionCacheIndex-d4a851a3c5da629e163dcd03395e2069 -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/build/XCBuildData/ca67aa9acac08aabe6ac47e649babea0-buildRequest.json: -------------------------------------------------------------------------------- 1 | { 2 | "_buildCommand2" : { 3 | "command" : "prepareForIndexing", 4 | "enableIndexBuildArena" : false, 5 | "targets" : null 6 | }, 7 | "buildCommand" : "build", 8 | "configuredTargets" : [ 9 | { 10 | "guid" : "bfdfe7dc352907fc980b868725387e9853a735b3dbcb86fa532787dbbe741ba1" 11 | }, 12 | { 13 | "guid" : "bfdfe7dc352907fc980b868725387e98fa965ff7d4c50522781da8e622650ccc" 14 | }, 15 | { 16 | "guid" : "bfdfe7dc352907fc980b868725387e989176bbd636a13f9582f645f1f0315a8f" 17 | }, 18 | { 19 | "guid" : "bfdfe7dc352907fc980b868725387e98828dc99e68108e01848c924cebb9b2d5" 20 | }, 21 | { 22 | "guid" : "bfdfe7dc352907fc980b868725387e98f52a87663484c8c5c2fb376dbe85216c" 23 | }, 24 | { 25 | "guid" : "bfdfe7dc352907fc980b868725387e98c38f60e79b6852c1670b94a65c88c3e3" 26 | }, 27 | { 28 | "guid" : "bfdfe7dc352907fc980b868725387e98718890dfdac589615663a02d43d9af3e" 29 | }, 30 | { 31 | "guid" : "bfdfe7dc352907fc980b868725387e98fb02688174fba82f7a6ff62a15cc01b1" 32 | }, 33 | { 34 | "guid" : "bfdfe7dc352907fc980b868725387e986171a815717084814afc0042a3ad3537" 35 | }, 36 | { 37 | "guid" : "bfdfe7dc352907fc980b868725387e987add8fbbd12553af2fc6f71a250cc7d9" 38 | }, 39 | { 40 | "guid" : "bfdfe7dc352907fc980b868725387e98fb7f2f9ff6d6a98058643a2ad7d4fd28" 41 | }, 42 | { 43 | "guid" : "bfdfe7dc352907fc980b868725387e98a6b27061cbc127d839897d1c9c38d2da" 44 | }, 45 | { 46 | "guid" : "bfdfe7dc352907fc980b868725387e98f10882e1684b8a3dfdec597bc0a47af3" 47 | }, 48 | { 49 | "guid" : "bfdfe7dc352907fc980b868725387e98c55f754f2a4256631cf6e7955c79207c" 50 | }, 51 | { 52 | "guid" : "bfdfe7dc352907fc980b868725387e986c443903ff579358efc7ca362a20a3e3" 53 | }, 54 | { 55 | "guid" : "bfdfe7dc352907fc980b868725387e98ad3313a78f35e7812546e8f704650165" 56 | }, 57 | { 58 | "guid" : "bfdfe7dc352907fc980b868725387e985ac61df7ae29ab23f6bce3d34421a8d8" 59 | }, 60 | { 61 | "guid" : "bfdfe7dc352907fc980b868725387e9827daaa4b3dcb31975b6acd421becbdab" 62 | }, 63 | { 64 | "guid" : "bfdfe7dc352907fc980b868725387e98259fcb143f873ba0ff63482d1ff1cd13" 65 | }, 66 | { 67 | "guid" : "bfdfe7dc352907fc980b868725387e98334d2a303d3f5620352d716d805f6acd" 68 | } 69 | ], 70 | "containerPath" : "/Users/ws/Documents/MyLib/cocoapods-hmap/spec/hmap/Resources/LGApp/Pods/Pods.xcodeproj", 71 | "continueBuildingAfterErrors" : true, 72 | "enableIndexBuildArena" : false, 73 | "hideShellScriptEnvironment" : false, 74 | "parameters" : { 75 | "action" : "build", 76 | "arenaInfo" : { 77 | "buildIntermediatesPath" : "", 78 | "buildProductsPath" : "", 79 | "derivedDataPath" : "/Users/ws/Library/Developer/Xcode/DerivedData", 80 | "indexDataStoreFolderPath" : "/Users/ws/Library/Developer/Xcode/DerivedData/Pods-exoewjeibasfddfjrrxxcpaqxvqd/Index/DataStore", 81 | "indexEnableDataStore" : true, 82 | "indexPCHPath" : "/Users/ws/Library/Developer/Xcode/DerivedData/Pods-exoewjeibasfddfjrrxxcpaqxvqd/Index/PrecompiledHeaders", 83 | "pchPath" : "" 84 | }, 85 | "configurationName" : "Release", 86 | "overrides" : { 87 | "synthesized" : { 88 | "table" : { 89 | "ENABLE_PREVIEWS" : "NO" 90 | } 91 | } 92 | } 93 | }, 94 | "qos" : "default", 95 | "schemeCommand" : "launch", 96 | "schemeCommand2" : "launch", 97 | "shouldCollectMetrics" : false, 98 | "showNonLoggedProgress" : true, 99 | "useDryRun" : true, 100 | "useImplicitDependencies" : false, 101 | "useLegacyBuildLocations" : false, 102 | "useParallelTargets" : false 103 | } -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/build/XCBuildData/ca67aa9acac08aabe6ac47e649babea0-desc.xcbuild: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Cat1237/cocoapods-hmap/5ccdfda7b6ecb479a4ee07e5d97e17940bbd5461/spec/hmap/Resources/LGApp/build/XCBuildData/ca67aa9acac08aabe6ac47e649babea0-desc.xcbuild -------------------------------------------------------------------------------- /spec/hmap/Resources/LGApp/build/XCBuildData/ca67aa9acac08aabe6ac47e649babea0-targetGraph.txt: -------------------------------------------------------------------------------- 1 | Target dependency graph (20 targets) 2 | AFNetworking in Pods, no dependencies 3 | CocoaLumberjack in Pods, no dependencies 4 | FBSDKCoreKit_Basics in Pods, no dependencies 5 | FBAEMKit in Pods, depends on: 6 | FBSDKCoreKit_Basics in Pods (explicit) 7 | FBSDKCoreKit in Pods, depends on: 8 | FBAEMKit in Pods (explicit) 9 | FBSDKCoreKit_Basics in Pods (explicit) 10 | FBSDKShareKit in Pods, depends on: 11 | FBSDKCoreKit in Pods (explicit) 12 | PromisesObjC in Pods, no dependencies 13 | GoogleUtilities in Pods, depends on: 14 | PromisesObjC in Pods (explicit) 15 | IGListDiffKit in Pods, no dependencies 16 | IGListKit in Pods, depends on: 17 | IGListDiffKit in Pods (explicit) 18 | Kingfisher in Pods, no dependencies 19 | MagicalRecord in Pods, no dependencies 20 | Realm in Pods, no dependencies 21 | WCDBOptimizedSQLCipher in Pods, no dependencies 22 | SQLiteRepairKit in Pods, depends on: 23 | WCDBOptimizedSQLCipher in Pods (explicit) 24 | WCDB.swift in Pods, depends on: 25 | SQLiteRepairKit in Pods (explicit) 26 | WCDBOptimizedSQLCipher in Pods (explicit) 27 | YYKit in Pods, no dependencies 28 | iOS-Echarts-iOS-Echarts in Pods, no dependencies 29 | iOS-Echarts in Pods, depends on: 30 | iOS-Echarts-iOS-Echarts in Pods (explicit) 31 | Pods-LGApp in Pods, depends on: 32 | AFNetworking in Pods (explicit) 33 | CocoaLumberjack in Pods (explicit) 34 | FBAEMKit in Pods (explicit) 35 | FBSDKCoreKit in Pods (explicit) 36 | FBSDKCoreKit_Basics in Pods (explicit) 37 | FBSDKShareKit in Pods (explicit) 38 | GoogleUtilities in Pods (explicit) 39 | IGListDiffKit in Pods (explicit) 40 | IGListKit in Pods (explicit) 41 | Kingfisher in Pods (explicit) 42 | MagicalRecord in Pods (explicit) 43 | PromisesObjC in Pods (explicit) 44 | Realm in Pods (explicit) 45 | SQLiteRepairKit in Pods (explicit) 46 | WCDB.swift in Pods (explicit) 47 | WCDBOptimizedSQLCipher in Pods (explicit) 48 | YYKit in Pods (explicit) 49 | iOS-Echarts in Pods (explicit) -------------------------------------------------------------------------------- /spec/hmap/Resources/all-target-headers.hmap: -------------------------------------------------------------------------------- 1 | pamhxJjJPVMM.h/Users/ws/Desktop/01-单文件编译/TestAndTestApp/TestAndTestApp/Dog.hCat.hTestAndTestApp/MM.hTestAndTestApp/Dog.h -------------------------------------------------------------------------------- /spec/hmap/Resources/mm.json: -------------------------------------------------------------------------------- 1 | { 2 | "MM.h": [ 3 | "/Users/ws/Desktop/01-单文件编译/TestAndTestApp/TestAndTestApp/", 4 | "MM.h" 5 | ], 6 | "Dog.h": [ 7 | "/Users/ws/Desktop/01-单文件编译/TestAndTestApp/TestAndTestApp/", 8 | "MM.h" 9 | ], 10 | "Cat.h": [ 11 | "/Users/ws/Desktop/01-单文件编译/TestAndTestApp/TestAndTestApp/", 12 | "MM.h" 13 | ], 14 | "TestAndTestApp/MM.h": [ 15 | "/Users/ws/Desktop/01-单文件编译/TestAndTestApp/TestAndTestApp/", 16 | "MM.h" 17 | ], 18 | "TestAndTestApp/Dog.h": [ 19 | "/Users/ws/Desktop/01-单文件编译/TestAndTestApp/TestAndTestApp/", 20 | "Dog.h" 21 | ], 22 | } -------------------------------------------------------------------------------- /spec/hmap/hmap_reader_spec.rb: -------------------------------------------------------------------------------- 1 | RSpec.describe 'cocoapods-hmap hmap-reader' do 2 | path = File.expand_path('./Resources/all-target-headers.hmap', File.dirname(__FILE__)) 3 | 4 | it 'reader' do 5 | # hmapfile reader --hmap-path=./LGObject.hmap 6 | HMap::Command.run(['reader', "--hmap-path=#{path}"]) 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /spec/hmap/hmap_writer_spec.rb: -------------------------------------------------------------------------------- 1 | RSpec.describe 'cocoapods-hmap hmap-reader' do 2 | path = File.expand_path('./Resources/mm.json', File.dirname(__FILE__)) 3 | output = File.expand_path('./Resources/all-target-headers.hmap', File.dirname(__FILE__)) 4 | 5 | it 'writer' do 6 | # hmapfile writer --json-path=./mm.json --output-path=./LGObject.hmap 7 | HMap::Command.run(['writer', "--json-path=#{path}", "--output-path=#{output}"]) 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /spec/spec_helper.rb: -------------------------------------------------------------------------------- 1 | require "hmap" 2 | 3 | RSpec.configure do |config| 4 | # Enable flags like --only-failures and --next-failure 5 | config.example_status_persistence_file_path = ".rspec_status" 6 | 7 | # Disable RSpec exposing methods globally on `Module` and `main` 8 | config.disable_monkey_patching! 9 | 10 | config.expect_with :rspec do |c| 11 | c.syntax = :expect 12 | end 13 | end 14 | --------------------------------------------------------------------------------