Skip to content

Commit

Permalink
refactor(cli): move xcodeproj/xcworkspace to config (#4032)
Browse files Browse the repository at this point in the history
  • Loading branch information
imhoffd committed Jan 8, 2021
1 parent 9393667 commit b23b077
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 39 deletions.
30 changes: 28 additions & 2 deletions cli/src/config.ts
@@ -1,6 +1,6 @@
import { pathExists, readJSON } from '@ionic/utils-fs';
import Debug from 'debug';
import { dirname, join, resolve } from 'path';
import { dirname, join, relative, resolve } from 'path';

import c from './colors';
import type {
Expand Down Expand Up @@ -238,7 +238,12 @@ async function loadIOSConfig(
const platformDir = extConfig.ios?.path ?? 'ios';
const platformDirAbs = resolve(rootDir, platformDir);
const nativeProjectDir = 'App';
const nativeProjectDirAbs = resolve(platformDirAbs, nativeProjectDir);
const nativeTargetDir = `${nativeProjectDir}/App`;
const nativeXcodeProjDir = `${nativeProjectDir}/App.xcodeproj`;
const nativeXcodeWorkspaceDirAbs = lazy(() =>
determineXcodeWorkspaceDirAbs(nativeProjectDirAbs),
);
const webDir = `${nativeProjectDir}/public`;
const cordovaPluginsDir = 'capacitor-cordova-ios-plugins';

Expand All @@ -250,9 +255,15 @@ async function loadIOSConfig(
cordovaPluginsDir,
cordovaPluginsDirAbs: resolve(platformDirAbs, cordovaPluginsDir),
nativeProjectDir,
nativeProjectDirAbs: resolve(platformDirAbs, nativeProjectDir),
nativeProjectDirAbs,
nativeTargetDir,
nativeTargetDirAbs: resolve(platformDirAbs, nativeTargetDir),
nativeXcodeProjDir,
nativeXcodeProjDirAbs: resolve(platformDirAbs, nativeXcodeProjDir),
nativeXcodeWorkspaceDir: lazy(async () =>
relative(platformDirAbs, await nativeXcodeWorkspaceDirAbs),
),
nativeXcodeWorkspaceDirAbs,
webDir,
webDirAbs: resolve(platformDirAbs, webDir),
podPath,
Expand Down Expand Up @@ -286,6 +297,21 @@ function determineOS(os: NodeJS.Platform): OS {
return OS.Unknown;
}

async function determineXcodeWorkspaceDirAbs(
nativeProjectDirAbs: string,
): Promise<string> {
const xcodeDir = resolve(nativeProjectDirAbs, 'App.xcworkspace');

if (!(await pathExists(xcodeDir))) {
fatal(
'Xcode workspace does not exist.\n' +
`Run ${c.input('npx cap add ios')} to bootstrap a new iOS project.`,
);
}

return xcodeDir;
}

async function determineAndroidStudioPath(os: OS): Promise<string> {
if (process.env.CAPACITOR_ANDROID_STUDIO_PATH) {
return process.env.CAPACITOR_ANDROID_STUDIO_PATH;
Expand Down
4 changes: 4 additions & 0 deletions cli/src/definitions.ts
Expand Up @@ -102,6 +102,10 @@ export interface IOSConfig extends PlatformConfig {
readonly nativeProjectDirAbs: string;
readonly nativeTargetDir: string;
readonly nativeTargetDirAbs: string;
readonly nativeXcodeProjDir: string;
readonly nativeXcodeProjDirAbs: string;
readonly nativeXcodeWorkspaceDir: Promise<string>;
readonly nativeXcodeWorkspaceDirAbs: Promise<string>;
}

export type WebConfig = PlatformConfig;
Expand Down
19 changes: 3 additions & 16 deletions cli/src/ios/common.ts
@@ -1,5 +1,5 @@
import { readdir, readFile, writeFile } from '@ionic/utils-fs';
import { join, resolve } from 'path';
import { readFile, writeFile } from '@ionic/utils-fs';
import { resolve } from 'path';

import c from '../colors';
import { checkCapacitorPlatform, getProjectPlatformDirectory } from '../common';
Expand All @@ -10,19 +10,6 @@ import type { Plugin } from '../plugin';
import { PluginType, getPluginPlatform } from '../plugin';
import { isInstalled } from '../util/subprocess';

export async function findXcodePath(config: Config): Promise<string | null> {
try {
const files = await readdir(config.ios.nativeProjectDirAbs);
const xcodeProject = files.find(file => file.endsWith('.xcworkspace'));
if (xcodeProject) {
return join(config.ios.nativeProjectDirAbs, xcodeProject);
}
return null;
} catch {
return null;
}
}

export async function checkIOSPackage(config: Config): Promise<string | null> {
return checkCapacitorPlatform(config, 'ios');
}
Expand Down Expand Up @@ -90,7 +77,7 @@ export async function editProjectSettingsIOS(config: Config): Promise<void> {
const appId = config.app.appId;
const appName = config.app.appName;

const pbxPath = `${config.ios.nativeTargetDirAbs}.xcodeproj/project.pbxproj`;
const pbxPath = `${config.ios.nativeXcodeProjDirAbs}/project.pbxproj`;
const plistPath = resolve(config.ios.nativeTargetDirAbs, 'Info.plist');

let plistContent = await readFile(plistPath, { encoding: 'utf-8' });
Expand Down
15 changes: 1 addition & 14 deletions cli/src/ios/open.ts
@@ -1,22 +1,9 @@
import open from 'open';

import c from '../colors';
import { wait } from '../common';
import type { Config } from '../definitions';
import { fatal } from '../errors';

import { findXcodePath } from './common';

export async function openIOS(config: Config): Promise<void> {
const xcodeProject = await findXcodePath(config);

if (!xcodeProject) {
fatal(
'Xcode workspace does not exist.\n' +
`Run ${c.input('npx cap add ios')} to bootstrap a new iOS project.`,
);
}

await open(xcodeProject, { wait: false });
await open(await config.ios.nativeXcodeWorkspaceDirAbs, { wait: false });
await wait(3000);
}
4 changes: 2 additions & 2 deletions cli/src/ios/run.ts
@@ -1,5 +1,5 @@
import Debug from 'debug';
import { resolve } from 'path';
import { basename, resolve } from 'path';

import c from '../colors';
import { promptForPlatformTarget, runTask } from '../common';
Expand Down Expand Up @@ -27,7 +27,7 @@ export async function runIOS(

const xcodebuildArgs = [
'-workspace',
'App.xcworkspace',
basename(await config.ios.nativeXcodeWorkspaceDirAbs),
'-scheme',
'App',
'-configuration',
Expand Down
6 changes: 1 addition & 5 deletions cli/src/ios/update.ts
Expand Up @@ -106,11 +106,7 @@ async function updatePodfile(

await runCommand(
'xcodebuild',
[
'-project',
basename(`${config.ios.nativeTargetDirAbs}.xcodeproj`),
'clean',
],
['-project', basename(`${config.ios.nativeXcodeProjDirAbs}`), 'clean'],
{
cwd: config.ios.nativeProjectDirAbs,
},
Expand Down

0 comments on commit b23b077

Please sign in to comment.