# Title `v1.2.0-pre0` - Network Robustness, Fog 1.2.0, Apple Silicon/M1 & Mac Catalyst # Description Added a way for implementing apps to pass in there own `HttpRequester` which can be useful for network robustness. Subspec `LibMobileCoin` now supports Apple Silicon/M1 and Mac Catalyst. Code changes to support Fog v1.2.0. #### `pre1` Changes - Uses the `v1.2.0-pre1` version of `LibMobileCoin` which supports a higher version of `GRPC`. - Added bridging headers - Updated Gemfile/Makefile to use the latest `cocoapods` version `1.11.2` #### Future Work Fix the `docs` steps in the circleci build process. Will require `jazzy` related fixes and testing on Xcode 11. # Changes ## Network Robustness Adds a separate `HTTP` networking architecture. An object conforming to `protocol HttpRequester` can be provided to the `NetworkConfig` object when the `MobileCoinClient` is created. Then the `TransportProtocolOption` can be changed from `grpc` to `http`. > NOTE: This branch will not run because it depends on changes in other submodules that have not yet been merged. ### `HttpRequester` Implementing apps/frameworks should provide an object conforming to this protocol. Our `RestApiRequester` wraps around an `HttpRequester` to communicate with with our services using `protobuf`s. ``` Sources/Network/HttpConnection/HttpRequester.swift ``` ### Attested & Auth Connection Wrappers `HTTP` versions of the Auth & Attested wrapper classes. These protocol and their default implementations handle the logic paths needed for authentication/attestation and re-authentication/attestation: > Can become generic ``` Sources/Network/HttpConnection/ArbitraryHttpConnection.swift Sources/Network/HttpConnection/AttestedHttpConnection.swift ``` ### Networking Protocols Separate code-paths for `HTTP` versions of the networking protocols: ``` Sources/Network/HttpConnection/HttpCallable/AttestedHttpCallable.swift Sources/Network/HttpConnection/HttpCallable/AuthHttpCallable.swift Sources/Network/HttpConnection/HttpCallable/AuthHttpCallableClientWrapper.swift Sources/Network/HttpConnection/HttpCallable/HttpCallable.swift ``` `HTTP` "interfaces" that closely mimic functionality from `GRPC`. Allows us to re-use more of our existing patterns. ``` Sources/Network/HttpConnection/HTTPInterface/HTTPCallOptions.swift Sources/Network/HttpConnection/HTTPInterface/HTTPClient.swift Sources/Network/HttpConnection/HTTPInterface/HTTPClientCall.swift Sources/Network/HttpConnection/HTTPInterface/HTTPMethod.swift Sources/Network/HttpConnection/HTTPInterface/HTTPResponse.swift Sources/Network/HttpConnection/HTTPInterface/HTTPStatus.swift Sources/Network/HttpConnection/HTTPInterface/HTTPUnaryCall.swift ``` ### `HTTP` Connection Implementations Wrapper classes that interface directly with `protoc-swift` generated `.swift` files for our protobuf models. ``` Sources/Network/HttpConnection/HttpConnection.swift Sources/Network/HttpConnection/HttpConnections/BlockchainHttpConnection.swift Sources/Network/HttpConnection/HttpConnections/ConsensusHttpConnection.swift Sources/Network/HttpConnection/HttpConnections/FogBlockHttpConnection.swift Sources/Network/HttpConnection/HttpConnections/FogKeyImageHttpConnection.swift Sources/Network/HttpConnection/HttpConnections/FogMerkleProofHttpConnection.swift Sources/Network/HttpConnection/HttpConnections/FogReportHttpConnection.swift Sources/Network/HttpConnection/HttpConnections/FogUntrustedTxOutHttpConnection.swift Sources/Network/HttpConnection/HttpConnections/FogViewHttpConnection.swift ``` ### `HTTP` versions of `protoc-swift` generated models The GRPC versions of these are generated by `protoc-swift`. The HTTP versions were edited by hand to work with the `HTTP` Connections implementations. > **This could be automated preferably with a `protoc-swift` plugin template but also `sed`/`VIM` if needed.** ``` Sources/Network/HttpConnection/HttpConnections/Http Proto Generated/attest.http.swift Sources/Network/HttpConnection/HttpConnections/Http Proto Generated/consensus_client.http.swift Sources/Network/HttpConnection/HttpConnections/Http Proto Generated/consensus_common.http.swift Sources/Network/HttpConnection/HttpConnections/Http Proto Generated/ledger.http.swift Sources/Network/HttpConnection/HttpConnections/Http Proto Generated/report.http.swift Sources/Network/HttpConnection/HttpConnections/Http Proto Generated/view.http.swift ``` ## Fog Updates The latest version of `fog` changes the name of a protobuf `FogLedger_Block` -> `FogLedger_BlockData`. ### Compressed Commitment The `TxOut` compressed commitment is no longer sent in the protobuf message because it can be reconstructed with its constituent parts (+ the user's `view_private_key`) We now reconstruct the commitment in several places whereas before it was being returned from the decoded protobuf message. Lastly some function signatures into `LibMobileCoin` were updated to adjust to the changes. ## Miscellaneous New MrEnclave values Support for Apple Silicon/M1 & Mac Catalyst ## Unit Tests One unit test was removed. It creates a TxOut and tries to unmask the value with an **incorrect** private view key. The return value should be 'nil' but is noise. It will require a change in the rust code and should be implemented in a future release. Some objects were re-serialized to match the new TxOut structure. Credentials are not required for `consensus` so this has been changed in the `NetworkConfig` Tests can be run with `TransportProtocol == .http` by changing the default value in `NetworkConfig`
85 lines
3.2 KiB
Ruby
85 lines
3.2 KiB
Ruby
source 'https://cdn.cocoapods.org/'
|
|
|
|
platform :ios, '10.0'
|
|
|
|
plugin 'cocoapods-repo-update'
|
|
keep_source_code_for_prebuilt_frameworks!
|
|
plugin 'cocoapods-keys', {
|
|
:project => "MobileCoin",
|
|
:keys => [
|
|
"devNetworkAuthUsername",
|
|
"devNetworkAuthPassword",
|
|
"testNetTestAccountMnemonicsCommaSeparated",
|
|
]}
|
|
|
|
use_frameworks!
|
|
|
|
ENV['MC_ENABLE_SWIFTLINT_SCRIPT'] = '1'
|
|
ENV['MC_ENABLE_WARN_LONG_COMPILE_TIMES'] = '1'
|
|
|
|
target 'Example' do
|
|
pod 'MobileCoin', path: '..'
|
|
pod 'MobileCoin/Core', path: '..', testspecs: ['Tests', 'IntegrationTests', 'PerformanceTests']
|
|
# pod 'MobileCoin', podspec: '../MobileCoin.podspec'
|
|
# pod 'MobileCoin/Core', podspec: '../MobileCoin.podspec', testspecs: ['Tests', 'IntegrationTests']
|
|
# pod 'MobileCoin', git: 'https://github.com/mobilecoinofficial/MobileCoin-Swift.git'
|
|
# pod 'MobileCoin/Core', git: 'https://github.com/mobilecoinofficial/MobileCoin-Swift.git', testspecs: ['Tests', 'IntegrationTests']
|
|
|
|
pod 'LibMobileCoin'
|
|
# pod 'LibMobileCoin', path: '../Vendor/libmobilecoin-ios-artifacts'
|
|
# pod 'LibMobileCoin', podspec: '../Vendor/libmobilecoin-ios-artifacts/LibMobileCoin.podspec'
|
|
# pod 'LibMobileCoin', git: 'https://github.com/the-real-adammork/libmobilecoin-ios-artifacts.git'
|
|
|
|
pod 'gRPC-Swift'
|
|
pod 'SwiftProtobuf'
|
|
pod 'SwiftLint'
|
|
end
|
|
|
|
post_install do |installer|
|
|
# Enable building tests using Testable Release build configuration
|
|
installer.pods_project.targets.each do |target|
|
|
next unless target.name == 'MobileCoin'
|
|
target.build_configurations.each do |config|
|
|
next unless config.name == 'Testable Release'
|
|
config.build_settings['ENABLE_TESTABILITY'] = 'YES'
|
|
end
|
|
end
|
|
|
|
# Enable running performance tests on a physical device
|
|
installer.pods_project.targets.each do |target|
|
|
target.build_configurations.each do |config|
|
|
if target.name == 'AppHost-MobileCoin-UI-Tests'
|
|
config.build_settings['DEVELOPMENT_TEAM'] = '8JT9JJD9Y5'
|
|
elsif target.name.start_with? 'MobileCoin-UI-'
|
|
config.build_settings['DEVELOPMENT_TEAM'] = '8JT9JJD9Y5'
|
|
config.build_settings.delete('CODE_SIGN_IDENTITY[sdk=iphoneos*]')
|
|
end
|
|
end
|
|
end
|
|
|
|
# Bump deployment target to 9.0 for pods that explicitly specify 8.0, since 9.0 is the minimum
|
|
# that Xcode 12 supports.
|
|
installer.pods_project.targets.each do |target|
|
|
target.build_configurations.each do |config|
|
|
if Gem::Version.new(config.build_settings['IPHONEOS_DEPLOYMENT_TARGET']) < Gem::Version.new('9.0')
|
|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0'
|
|
end
|
|
end
|
|
end
|
|
|
|
# Add Keys framework to Integration Tests for injecting values using cocoapods-keys
|
|
installer.pods_project.targets.each do |target|
|
|
next unless target.name == 'MobileCoin-Unit-Core-IntegrationTests'
|
|
installer.pods_project.targets.each do |keys_target|
|
|
next unless keys_target.name == 'Keys'
|
|
target.add_dependency(keys_target)
|
|
end
|
|
target.build_configurations.each do |config|
|
|
config.build_settings["FRAMEWORK_SEARCH_PATHS"] ||= "$(inherited)"
|
|
config.build_settings["FRAMEWORK_SEARCH_PATHS"] << ' "${PODS_CONFIGURATION_BUILD_DIR}/Keys"'
|
|
config.build_settings["OTHER_LDFLAGS"] ||= "$(inherited)"
|
|
config.build_settings["OTHER_LDFLAGS"] << ' -framework "Keys"'
|
|
end
|
|
end
|
|
end
|