Skip to content

Merge release into master #5036

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 28 commits into from
Sep 26, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
a4ed960
chore: bump version to 6.1.1
rosen-vladimirov Aug 30, 2019
d742c86
chore: add changelog for 6.1.0. release
Fatme Sep 3, 2019
c317abe
fix: add cache decorator when getting ip address
Fatme Sep 3, 2019
57de601
chore: fix PR comments
Fatme Sep 4, 2019
3ace105
test: add unit test verifying the whoami endpoint will be called only…
Fatme Sep 4, 2019
7ecd4d6
Merge pull request #5008 from NativeScript/fatme/changelog-6.1.0
Fatme Sep 4, 2019
7708ea4
Merge pull request #5010 from NativeScript/fatme/cache-whoami-endpoint
Fatme Sep 4, 2019
c1e47cb
Merge pull request #5011 from NativeScript/release-patch
rosen-vladimirov Sep 4, 2019
f8f21ca
fix: bundle indentifier warning in Xcode11
KristianDD Sep 5, 2019
46ffb7c
fix: pass preserve-symlinks correctly
rosen-vladimirov Sep 10, 2019
aa8dc95
Merge pull request #5015 from NativeScript/vladimirov/fix-args-webpack
rosen-vladimirov Sep 10, 2019
119f663
Merge pull request #5013 from NativeScript/kddimitrov/fix-bundle-iden…
KristianDD Sep 11, 2019
f763264
fix: preview shouldn't start native watch
KristianDD Sep 11, 2019
984468d
chore: fix comments
KristianDD Sep 12, 2019
1daa7aa
Merge pull request #5016 from NativeScript/kddimitrov/fix-preview-wat…
KristianDD Sep 12, 2019
6b46010
feat: implement runtime version tracking
KristianDD Sep 13, 2019
6db148f
chore: update changelog for 6.1.1
KristianDD Sep 17, 2019
c6c4214
Merge pull request #5019 from NativeScript/kddimitrov/6.1.1-changelog
KristianDD Sep 17, 2019
6985f90
Merge pull request #5017 from NativeScript/kddimitrov/runtime-version…
KristianDD Sep 17, 2019
47fb154
chore: set version to 6.1.2
rosen-vladimirov Sep 17, 2019
5c5d184
chore: update changelog for 6.1.2
rosen-vladimirov Sep 17, 2019
bc5e0e1
Merge pull request #5023 from NativeScript/vladimirov/bump-612
rosen-vladimirov Sep 18, 2019
4e5e679
docs: mention the Docker proxy settings in the docs as we will start …
DimitarTachev Sep 18, 2019
505e019
Merge pull request #5025 from NativeScript/tachev/update-proxy-docs
Sep 20, 2019
9c22e65
fix: pass the skipNativePrepare value from the deploy controller
DimitarTachev Sep 20, 2019
1e17777
fix: set the env.skipSnapshotTools based on the skipNativeValue in or…
DimitarTachev Sep 20, 2019
528fc24
Merge pull request #5028 from NativeScript/tachev/fix-skip-native-pre…
Sep 24, 2019
48f5135
Merge branch 'release' into tachev/merge-release-into-master
DimitarTachev Sep 26, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,43 @@
NativeScript CLI Changelog
================

6.1.2 (2019, September 18)
==

### Fixed
* [Fixed #5018](https://github.com/NativeScript/nativescript-cli/issues/5018): Track runtime versions on add and on build, run, deploy


6.1.1 (2019, September 17)
==

### Fixed

* [Fixed #5015](https://github.com/NativeScript/nativescript-cli/pull/5015): CLI passes `--preserve-symlinks` to the webpack itself, not to the Node.js
* [Fixed #4893](https://github.com/NativeScript/nativescript-cli/issues/4893): `tns preview` crashes when scanning on devices with different platforms
* [Fixed #4939](https://github.com/NativeScript/nativescript-cli/issues/4939): Xcode 11 warning: `CFBundleIdentifier value must be the same as PRODUCT_BUNDLE_IDENTIFIER`

6.1.0 (2019, September 04)
==

### New

* [Implemented #4229](https://github.com/NativeScript/nativescript-cli/issues/4229): Do not display command usage help after execution is started
* [Implemented #4909](https://github.com/NativeScript/nativescript-cli/issues/4909): Support for Xcode 11 and iOS 13
* [Implemented #4926](https://github.com/NativeScript/nativescript-cli/issues/4926): Android SDK 29 support
* [Implemented #4947](https://github.com/NativeScript/nativescript-cli/issues/4947): Add tracking for both React NativeScript and Svelte Native projects
* [Implemented #4966](https://github.com/NativeScript/nativescript-cli/issues/4966): Support LiveSync to iOS Wi-Fi devices
* [Implemented #4974](https://github.com/NativeScript/nativescript-cli/issues/4974): Ask the users why they've uninstalled NativeScript CLI
* [Implemented #4976](https://github.com/NativeScript/nativescript-cli/issues/4976): Handle changes in iOS and Android Runtime 6.1.0 logging
* [Implemented #4980](https://github.com/NativeScript/nativescript-cli/issues/4980): Update message for subscribing to NativeScript newsletter
* [Implemented #4992](https://github.com/NativeScript/nativescript-cli/pull/4992): Allow tns to be able to use npm configuration properly

### Fixed

* [Fixed #4936](https://github.com/NativeScript/nativescript-cli/issues/4936): HMR not recovering after exception in Angular lazy routes
* [Fixed #4958](https://github.com/NativeScript/nativescript-cli/issues/4958): `tns doctor` fails when setup is not correct and user selects to fix it manually
* [Fixed #4971](https://github.com/NativeScript/nativescript-cli/issues/4971): Not needed checks are executed on `pod install`

6.0.3 (2019, August 05)
==
* [Fixed #4914](https://github.com/NativeScript/nativescript-cli/issues/4914): livesync not working with command tns test android
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -143,9 +143,10 @@ The <code>--insecure</code> flag allows you to perform insecure SSL connections
#### Limitations

* You can provide the `<Username>` and `<Password>` attributes only on Windows systems.
* Proxy settings for the npm and the Android Gradle need to be configured separately. For more information, see the following articles:
* Proxy settings for the npm, the Android Gradle and (optional) Docker need to be configured separately. For more information, see the following articles:
* [Configure the npm proxy](https://docs.npmjs.com/misc/config#https-proxy)
* [Configure the Android Gradle proxy](https://docs.gradle.org/3.3/userguide/build_environment.html#sec:accessing_the_web_via_a_proxy)
* [Configure the Docker proxy](https://docs.docker.com/network/proxy/)

### Display Current Proxy Settings

Expand Down
3 changes: 2 additions & 1 deletion docs/man_pages/general/proxy-set.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,10 @@ General | `$ tns proxy set [<Url> <% if(isWindows) {%>[<Username> [<Password>]]<
### Command Limitations

* You can set credentials only on Windows systems.
* Proxy settings for npm and (Android) Gradle need to be set separately.
* Proxy settings for npm, (Android) Gradle and (optional) Docker need to be set separately.
* configuring `npm` proxy - https://docs.npmjs.com/misc/config#https-proxy
* (Android) configuring Gradle proxy - set global configuration in the user directory - _<USER_HOME>/.gradle/gradle.properties_ - https://docs.gradle.org/3.3/userguide/build_environment.html#sec:accessing_the_web_via_a_proxy
* configuring Docker proxy - https://docs.docker.com/network/proxy/

### Related Commands

Expand Down
1 change: 1 addition & 0 deletions lib/bootstrap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ $injector.require("gradleCommandService", "./services/android/gradle-command-ser
$injector.require("gradleBuildService", "./services/android/gradle-build-service");
$injector.require("gradleBuildArgsService", "./services/android/gradle-build-args-service");
$injector.require("iOSEntitlementsService", "./services/ios-entitlements-service");
$injector.require("iOSNativeTargetService", "./services/ios-native-target-service");
$injector.require("iOSExtensionsService", "./services/ios-extensions-service");
$injector.require("iOSWatchAppService", "./services/ios-watch-app-service");
$injector.require("iOSProjectService", "./services/ios-project-service");
Expand Down
4 changes: 3 additions & 1 deletion lib/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,9 @@ export const enum TrackActionNames {
AcceptTracking = "Accept Tracking",
Performance = "Performance",
PreviewAppData = "Preview App Data",
UninstallCLI = "Uninstall CLI"
UninstallCLI = "Uninstall CLI",
UsingRuntimeVersion = "Using Runtime Version",
AddPlatform = "Add Platform"
}

export const AnalyticsEventLabelDelimiter = "__";
Expand Down
6 changes: 5 additions & 1 deletion lib/controllers/deploy-controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,11 @@ export class DeployController {

const executeAction = async (device: Mobile.IDevice) => {
const deviceDescriptor = _.find(deviceDescriptors, dd => dd.identifier === device.deviceInfo.identifier);
await this.$prepareController.prepare(deviceDescriptor.buildData);
const prepareData = {
...deviceDescriptor.buildData,
nativePrepare: { skipNativePrepare: !!deviceDescriptor.skipNativePrepare }
};
await this.$prepareController.prepare(prepareData);
const packageFilePath = await deviceDescriptor.buildAction();
await this.$deviceInstallAppService.installOnDevice(device, { ...deviceDescriptor.buildData, buildForDevice: !device.isEmulator }, packageFilePath);
};
Expand Down
47 changes: 40 additions & 7 deletions lib/controllers/prepare-controller.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import * as choki from "chokidar";
import { hook } from "../common/helpers";
import { performanceLog } from "../common/decorators";
import { performanceLog, cache } from "../common/decorators";
import { EventEmitter } from "events";
import * as path from "path";
import { PREPARE_READY_EVENT_NAME, WEBPACK_COMPILATION_COMPLETE, PACKAGE_JSON_FILE_NAME, PLATFORMS_DIR_NAME } from "../constants";

import { PREPARE_READY_EVENT_NAME, WEBPACK_COMPILATION_COMPLETE, PACKAGE_JSON_FILE_NAME, PLATFORMS_DIR_NAME, TrackActionNames, AnalyticsEventLabelDelimiter } from "../constants";
interface IPlatformWatcherData {
hasWebpackCompilerProcess: boolean;
nativeFilesWatcher: choki.FSWatcher;
Expand All @@ -27,12 +26,14 @@ export class PrepareController extends EventEmitter {
private $projectChangesService: IProjectChangesService,
private $projectDataService: IProjectDataService,
private $webpackCompilerService: IWebpackCompilerService,
private $watchIgnoreListService: IWatchIgnoreListService
private $watchIgnoreListService: IWatchIgnoreListService,
private $analyticsService: IAnalyticsService
) { super(); }

public async prepare(prepareData: IPrepareData): Promise<IPrepareResultData> {
const projectData = this.$projectDataService.getProjectData(prepareData.projectDir);

await this.trackRuntimeVersion(prepareData.platform, projectData);
await this.$pluginsService.ensureAllDependenciesAreInstalled(projectData);

return this.prepareCore(prepareData, projectData);
Expand Down Expand Up @@ -127,6 +128,21 @@ export class PrepareController extends EventEmitter {
}

private async startNativeWatcherWithPrepare(platformData: IPlatformData, projectData: IProjectData, prepareData: IPrepareData): Promise<boolean> {
let newNativeWatchStarted = false;
let hasNativeChanges = false;

if (prepareData.watchNative) {
newNativeWatchStarted = await this.startNativeWatcher(platformData, projectData);
}

if (newNativeWatchStarted) {
hasNativeChanges = await this.$prepareNativePlatformService.prepareNativePlatform(platformData, projectData, prepareData);
}

return hasNativeChanges;
}

private async startNativeWatcher(platformData: IPlatformData, projectData: IProjectData): Promise<boolean> {
if (this.watchersData[projectData.projectDir][platformData.platformNameLowerCase].nativeFilesWatcher) {
return false;
}
Expand Down Expand Up @@ -155,9 +171,7 @@ export class PrepareController extends EventEmitter {

this.watchersData[projectData.projectDir][platformData.platformNameLowerCase].nativeFilesWatcher = watcher;

const hasNativeChanges = await this.$prepareNativePlatformService.prepareNativePlatform(platformData, projectData, prepareData);

return hasNativeChanges;
return true;
}

@hook('watchPatterns')
Expand Down Expand Up @@ -186,5 +200,24 @@ export class PrepareController extends EventEmitter {
this.persistedData.push(filesChangeEventData);
}
}

@cache()
private async trackRuntimeVersion(platform: string, projectData: IProjectData): Promise<void> {
let runtimeVersion: string = null;
try {
const platformData = this.$platformsDataService.getPlatformData(platform, projectData);
const runtimeVersionData = this.$projectDataService.getNSValue(projectData.projectDir, platformData.frameworkPackageName);
runtimeVersion = runtimeVersionData && runtimeVersionData.version;
} catch (err) {
this.$logger.trace(`Unable to get runtime version for project directory: ${projectData.projectDir} and platform ${platform}. Error is: `, err);
}

if (runtimeVersion) {
await this.$analyticsService.trackEventActionInGoogleAnalytics({
action: TrackActionNames.UsingRuntimeVersion,
additionalData: `${platform.toLowerCase()}${AnalyticsEventLabelDelimiter}${runtimeVersion}`
});
}
}
}
$injector.register("prepareController", PrepareController);
2 changes: 1 addition & 1 deletion lib/controllers/preview-app-controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ export class PreviewAppController extends EventEmitter implements IPreviewAppCon
data.env = data.env || {};
data.env.externals = this.$previewAppPluginsService.getExternalPlugins(device);

const prepareData = this.$prepareDataService.getPrepareData(data.projectDir, device.platform.toLowerCase(), { ...data, nativePrepare: { skipNativePrepare: true }, watch: true });
const prepareData = this.$prepareDataService.getPrepareData(data.projectDir, device.platform.toLowerCase(), { ...data, nativePrepare: { skipNativePrepare: true }, watch: true, watchNative: false });
await this.$prepareController.prepare(prepareData);

try {
Expand Down
4 changes: 4 additions & 0 deletions lib/data/prepare-data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ export class PrepareData extends ControllerDataBase {
public hmr: boolean;
public env: any;
public watch?: boolean;
public watchNative: boolean = true;

constructor(public projectDir: string, public platform: string, data: any) {
super(projectDir, platform, data);
Expand All @@ -16,6 +17,9 @@ export class PrepareData extends ControllerDataBase {
hmr: data.hmr || data.useHotModuleReload
};
this.watch = data.watch;
if (_.isBoolean(data.watchNative)) {
this.watchNative = data.watchNative;
}
}
}

Expand Down
1 change: 1 addition & 0 deletions lib/definitions/prepare.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ declare global {
hmr: boolean;
env: any;
watch?: boolean;
watchNative: boolean
}

interface IiOSCodeSigningData {
Expand Down
20 changes: 17 additions & 3 deletions lib/definitions/project.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -458,12 +458,26 @@ interface ICocoaPodsPlatformManager {
replacePlatformRow(podfileContent: string, podfilePath: string): { replacedContent: string, podfilePlatformData: IPodfilePlatformData };
}

declare const enum BuildNames {
debug = "Debug",
release = "Release"
}

interface IXcodeTargetBuildConfigurationProperty {
name: string;
value: any;
buildNames?: BuildNames[];
}

/**
* Describes a service used to add and remove iOS extension
*/
interface IIOSExtensionsService {
addExtensionsFromPath(options: IAddExtensionsFromPathOptions): Promise<boolean>;
removeExtensions(options: IRemoveExtensionsOptions): void;
interface IIOSNativeTargetService {
addTargetToProject(targetRootPath: string, targetFolder: string, targetType: string, project: IXcode.project, platformData: IPlatformData, parentTarget?: string): IXcode.target;
prepareSigning(targetUuids: string[], projectData:IProjectData, projectPath: string): void;
getTargetDirectories(folderPath: string): string[];
setXcodeTargetBuildConfigurationProperties(properties: IXcodeTargetBuildConfigurationProperty[], targetName: string, project: IXcode.project): void
setConfigurationsFromJsonFile(jsonPath: string, targetUuid: string, targetName: string, project: IXcode.project): void
}

/**
Expand Down
17 changes: 8 additions & 9 deletions lib/services/ios-extensions-service.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import * as path from "path";
import { NativeTargetServiceBase } from "./ios-native-target-service-base";
import { IOSNativeTargetProductTypes, IOSNativeTargetTypes } from "../constants";

export class IOSExtensionsService extends NativeTargetServiceBase implements IIOSExtensionsService {
export class IOSExtensionsService implements IIOSExtensionsService {
constructor(protected $fs: IFileSystem,
protected $pbxprojDomXcode: IPbxprojDomXcode,
protected $xcode: IXcode) {
super($fs, $pbxprojDomXcode, $xcode);
protected $xcode: IXcode,
private $iOSNativeTargetService: IIOSNativeTargetService) {
}

public async addExtensionsFromPath({extensionsFolderPath, projectData, platformData, pbxProjPath}: IAddExtensionsFromPathOptions): Promise<boolean> {
Expand All @@ -17,29 +16,29 @@ export class IOSExtensionsService extends NativeTargetServiceBase implements IIO
}
const project = new this.$xcode.project(pbxProjPath);
project.parseSync();
this.getTargetDirectories(extensionsFolderPath)
this.$iOSNativeTargetService.getTargetDirectories(extensionsFolderPath)
.forEach(extensionFolder => {
const target = this.addTargetToProject(extensionsFolderPath, extensionFolder, IOSNativeTargetTypes.appExtension, project, platformData);
const target = this.$iOSNativeTargetService.addTargetToProject(extensionsFolderPath, extensionFolder, IOSNativeTargetTypes.appExtension, project, platformData);
this.configureTarget(extensionFolder, path.join(extensionsFolderPath, extensionFolder), target, project, projectData);
targetUuids.push(target.uuid);
addedExtensions = true;
});

this.$fs.writeFile(pbxProjPath, project.writeSync({omitEmptyValues: true}));
this.prepareSigning(targetUuids, projectData, pbxProjPath);
this.$iOSNativeTargetService.prepareSigning(targetUuids, projectData, pbxProjPath);

return addedExtensions;
}

private configureTarget(extensionName: string, extensionPath: string, target: IXcode.target, project: IXcode.project, projectData: IProjectData) {
const extJsonPath = path.join(extensionPath, "extension.json");

this.setXcodeTargetBuildConfigurationProperties(
this.$iOSNativeTargetService.setXcodeTargetBuildConfigurationProperties(
[{name: "PRODUCT_BUNDLE_IDENTIFIER", value: `${projectData.projectIdentifiers.ios}.${extensionName}`}],
extensionName,
project);

this.setConfigurationsFromJsonFile(extJsonPath, target.uuid, extensionName, project);
this.$iOSNativeTargetService.setConfigurationsFromJsonFile(extJsonPath, target.uuid, extensionName, project);
}

public removeExtensions({pbxProjPath}: IRemoveExtensionsOptions): void {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,39 +1,27 @@
import * as path from "path";

export enum BuildNames {
debug = "Debug",
release = "Release"
}

export interface IXcodeTargetBuildConfigurationProperty {
name: string;
value: any;
buildNames?: BuildNames[];
}

export abstract class NativeTargetServiceBase {
export class IOSNativeTargetService implements IIOSNativeTargetService {
constructor(protected $fs: IFileSystem,
protected $pbxprojDomXcode: IPbxprojDomXcode,
protected $xcode: IXcode) {
protected $pbxprojDomXcode: IPbxprojDomXcode) {
}

protected addTargetToProject(extensionsFolderPath: string, extensionFolder: string, targetType: string, project: IXcode.project, platformData: IPlatformData, parentTarget?: string): IXcode.target {
const extensionPath = path.join(extensionsFolderPath, extensionFolder);
const extensionRelativePath = path.relative(platformData.projectRoot, extensionPath);
const files = this.$fs.readDirectory(extensionPath)
public addTargetToProject(targetRootPath: string, targetFolder: string, targetType: string, project: IXcode.project, platformData: IPlatformData, parentTarget?: string): IXcode.target {
const targetPath = path.join(targetRootPath, targetFolder);
const targetRelativePath = path.relative(platformData.projectRoot, targetPath);
const files = this.$fs.readDirectory(targetPath)
.filter(filePath => !filePath.startsWith("."))
.map(filePath => path.join(extensionPath, filePath));
const target = project.addTarget(extensionFolder, targetType, extensionRelativePath, parentTarget);
.map(filePath => path.join(targetPath, filePath));
const target = project.addTarget(targetFolder, targetType, targetRelativePath, parentTarget);
project.addBuildPhase([], 'PBXSourcesBuildPhase', 'Sources', target.uuid);
project.addBuildPhase([], 'PBXResourcesBuildPhase', 'Resources', target.uuid);
project.addBuildPhase([], 'PBXFrameworksBuildPhase', 'Frameworks', target.uuid);

project.addPbxGroup(files, extensionFolder, extensionPath, null, { isMain: true, target: target.uuid, filesRelativeToProject: true });
project.addToHeaderSearchPaths(extensionPath, target.pbxNativeTarget.productName);
project.addPbxGroup(files, targetFolder, targetPath, null, { isMain: true, target: target.uuid, filesRelativeToProject: true });
project.addToHeaderSearchPaths(targetPath, target.pbxNativeTarget.productName);
return target;
}

protected prepareSigning(targetUuids: string[], projectData:IProjectData, projectPath: string) {
public prepareSigning(targetUuids: string[], projectData: IProjectData, projectPath: string): void {
const xcode = this.$pbxprojDomXcode.Xcode.open(projectPath);
const signing = xcode.getSigning(projectData.projectName);
if (signing !== undefined) {
Expand All @@ -52,7 +40,7 @@ export abstract class NativeTargetServiceBase {
xcode.save();
}

protected getTargetDirectories(folderPath: string): string[] {
public getTargetDirectories(folderPath: string): string[] {
return this.$fs.readDirectory(folderPath)
.filter(fileName => {
const filePath = path.join(folderPath, fileName);
Expand All @@ -62,7 +50,7 @@ export abstract class NativeTargetServiceBase {
});
}

protected setXcodeTargetBuildConfigurationProperties(properties: IXcodeTargetBuildConfigurationProperty[], targetName: string, project: IXcode.project): void {
public setXcodeTargetBuildConfigurationProperties(properties: IXcodeTargetBuildConfigurationProperty[], targetName: string, project: IXcode.project): void {
properties.forEach(property => {
const buildNames = property.buildNames || [BuildNames.debug, BuildNames.release];
buildNames.forEach((buildName) => {
Expand All @@ -71,7 +59,7 @@ export abstract class NativeTargetServiceBase {
});
}

protected setConfigurationsFromJsonFile(jsonPath: string, targetUuid: string, targetName: string, project: IXcode.project) {
public setConfigurationsFromJsonFile(jsonPath: string, targetUuid: string, targetName: string, project: IXcode.project): void {
if (this.$fs.exists(jsonPath)) {
const configurationJson = this.$fs.readJson(jsonPath) || {};

Expand All @@ -94,3 +82,5 @@ export abstract class NativeTargetServiceBase {
}
}
}

$injector.register("iOSNativeTargetService", IOSNativeTargetService);
Loading