Files
wwwcg c9ee0a92c2 feat(hermes): hermes engine support (phase I) (#4169)
* feat(hermes): support hermes engine first part

feat(hermes): support hermes engine second part

feat(hermes): close demo v8 serialization

feat(hermes): jsi mode support

feat(hermes): demo build script support hermes

feat(hermes): use std::any_cast in ios 11 when opening c++ exception

* fix(ios): resolve hermes build error

* feat(hermes): remove obsolete context wrapper

* feat(ios): support dynamic switching hermes and jsc

* feat(hermes): engine infrastructure improve

* feat(hermes): devtools support for ios

* feat(hermes): update engine version and

* feat(ios): drop v8 engine support

* refactor(ios): bridge setup process and update demo

chore(hermes): update hermes context imp

* chore(hermes): resolve build issue

* chore(ios): remove unnecessary assert

* fix(hermes): resolve context nullptr exception

* feat(hermes): using embeded hbc code for hermes

refactor native source code 's structure

* feat(hermes): resolve bugs and code clean

* feat(hermes): update ws url for devtools under hermes engine

use android as hermes's identity for now

* feat(hermes): resolve build issue

* feat(hermes): add ArrayBuffer type support

* fix(hermes): resolve rebase issues

code refactor for ios jeexecutor

* fix(hermes): dynamic load not support for hermes

Temporary solution

* chore(hermes): add warning ignore mark

* feat(hermes): engine ctx bugfix

* feat(hermes): resolve android build issues

* feat(hermes): resolve android build issue

* fix(hermes): add null pointer check during engine release

optimize call function imp

* feat(hermes): resolve context release issue

* feat(hermes): use toLocaleLowerCase since hermes support

* fix(hermes): resolve build issues

* feat(hermes): use toLowerCase in hippy js package

* chore(hermes): restore android demo params

* fix(core): adjust context destructor timing to avoid crash

* feat(hermes): resolve context bug and config update

* feat(hermes): update core build scripts for android and ohos

* feat(ios): update podspec and bump deployment version

* build(hermes): update build config for android and ohos

* feat(hermes): resolve ohos build issues

* fix(hermes): resolve ohos build issue

* fix(hermes): resolve test failure

* docs(hermes): add hermes usage guide

* chore(hermes): use jsc by default in demo

* feat(hermes): update docs and code optimize

* chore(ios): disable bitcode for iOS demo

* docs(hermes): update hermes usage guide

* chore(hermes): revert android config modify

* feat(hermes): context code optimization

* feat(hermes): context code optimization

* build(js): resolve some frontend build issues
2025-03-05 21:06:21 +08:00

115 lines
3.1 KiB
Objective-C

/*!
* iOS SDK
*
* Tencent is pleased to support the open source community by making
* Hippy available.
*
* Copyright (C) 2019 THL A29 Limited, a Tencent company.
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import "HippyBundleURLProvider.h"
NSString *const HippyBundleURLSchemeHttp = @"http";
NSString *const HippyBundleURLSchemetHttps = @"https";
@interface HippyBundleURLProvider ()
@property (nonatomic, copy) NSString *localhostIP;
@property (nonatomic, copy) NSString *localhostPort;
@property (nonatomic, copy) NSString *debugPathUrl;
@property (nonatomic, copy) NSString *versionId;
@property (nonatomic, copy) NSString *scheme;
@property (nonatomic, copy) NSString *wsURL;
@end
@implementation HippyBundleURLProvider
#pragma mark - Life cycle
+ (instancetype)sharedInstance {
static HippyBundleURLProvider *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[HippyBundleURLProvider alloc] init];
});
return sharedInstance;
}
+ (NSString *)parseVersionId:(NSString *)path {
if (path.length <= 0) {
return @"";
}
if ([path hasPrefix:@"/"]) {
path = [path substringFromIndex:1];
}
NSArray<NSString *> *pathArray = [path componentsSeparatedByString:@"/"];
if (pathArray.count <= 1) {
return @"";
}
return [pathArray firstObject];
}
- (instancetype)init {
self = [super init];
if (self) {
_scheme = HippyBundleURLSchemeHttp;
_localhostIP = @"localhost";
_localhostPort = @"38989";
_debugPathUrl = @"/index.bundle?platform=ios&dev=true&minify=false";
}
return self;
}
#pragma mark - Public
- (void)setLocalhostIP:(NSString *)localhostIP localhostPort:(NSString *)localhostPort {
if (localhostIP) {
_localhostIP = localhostIP;
}
if (localhostPort) {
_localhostPort = localhostPort;
}
}
- (void)setScheme:(NSString *)scheme {
if (scheme) {
_scheme = scheme;
}
}
- (void)setDebugPathUrl:(NSString *)debugPathUrl {
if (debugPathUrl) {
_debugPathUrl = debugPathUrl;
_versionId = [HippyBundleURLProvider parseVersionId:_debugPathUrl];
}
}
- (NSString *)localhost {
return [NSString stringWithFormat:@"%@:%@", _localhostIP, _localhostPort];
}
- (NSString *)bundleURLString {
NSString *scheme = _scheme.length > 0 ? _scheme : HippyBundleURLSchemeHttp;
NSString *debugPath = _debugPathUrl;
if (_wsURL.length > 0) {
debugPath = [NSString stringWithFormat:@"%@&%@", debugPath, _wsURL];
}
return [NSString stringWithFormat:@"%@://%@%@", scheme, self.localhost, debugPath];
}
@end