apache / apache/cordova-node-xcode

pbxProject hasFile returns false for existing file on Windows

Đang mở
#116 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
JavaScript
Star
217
Fork
102
Merge trung bình
2 ngày 3 giờ
Pull request đã merge (30 ngày)
6

Mô tả

We are running into an issue with this in our Expo CLI on Windows. After some investigation, it looks like there are some issues with Posix and Windows paths when detecting if files exists or not.

I [created a repository](https://github.com/bycedric/xcode-windows-hasfile-issue) with an example running on Ubuntu, MacOS and Windows that demonstrates this issue. The scenario it's testing is fairly simple:

```js
const PBX_PROJECT_PATH = path.resolve('ios', 'testios2.xcodeproj', 'project.pbxproj');
const SPLASH_SCREEN_PATH = path.join('testios2', 'SplashScreen.storyboard');

// Create a new pbx project instance
const project = xcode.project(PBX_PROJECT_PATH);
// Now parse the project
project.parseSync();

// Determine if "SplashScreen.storyboard" exists
const file = project.hasFile(SPLASH_SCREEN_PATH);
```

You see that this is done successfully on both [Linux](https://github.com/byCedric/xcode-windows-hasfile-issue/runs/1231850644?check_suite_focus=true#step:6:8) and [MacOS](https://github.com/byCedric/xcode-windows-hasfile-issue/runs/1231850677?check_suite_focus=true#step:6:8), but [fails on Windows](https://github.com/byCedric/xcode-windows-hasfile-issue/runs/1231850707?check_suite_focus=true#step:6:8).

There is a workaround, you have to force the `SPLASH_SCREEN_PATH` to always be a posix formatted path. That works on [Linux](https://github.com/byCedric/xcode-windows-hasfile-issue/runs/1231850644?check_suite_focus=true#step:5:8), [MacOS](https://github.com/byCedric/xcode-windows-hasfile-issue/runs/1231850677?check_suite_focus=true#step:5:8), _and_ [Windows](https://github.com/byCedric/xcode-windows-hasfile-issue/runs/1231850707?check_suite_focus=true#step:5:8).

```js
const SPLASH_SCREEN_PATH = path.join('testios2', 'SplashScreen.storyboard')
// Force the path to always be a posix formatted path
.replace(path.sep, path.posix.sep);
```

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu với lệnh gọi project.hasFile đối với project.pbxproj được tham chiếu và tái hiện nó bằng ví dụ đa nền tảng được liên kết trên Windows, Linux và macOS. Theo dõi cách SPLASH_SCREEN_PATH được định dạng cho Windows được kiểm tra, và coi issue là hoàn tất khi phát hiện một tệp hiện có trên Windows mà không làm hỏng các nền tảng khác.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
javascript
Lĩnh vực
mobile-dev
Loại issue
Lỗi
Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
45/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.