Все прошло довольно гладко. Однако я столкнулся с ошибкой. Я уверен, что это просто какая-то настройка xcode или что-то в этом роде.
У меня установлен @react-native-clipboard/clipboard (версия ^1.14.1). И после обновления, когда я запустил приложение, я получил эту ошибку.
WARN `new NativeEventEmitter()` was called with a non-null argument without the required `addListener` method.
WARN `new NativeEventEmitter()` was called with a non-null argument without the required `removeListeners` method.

Я сделал несколько вещей, чтобы диагностировать это дальше. Во-первых, я создал совершенно новый проект RN CLI с тем же самым package.json, и не получаю этой ошибки. С этого момента я буду называть существующий обновленный проект, который получает предупреждение, старым проектом, а новый проект, в котором нет ошибки, - новым проектом.
Ошибка возникает из этого файла ./node_modules/@react-native-clipboard/clipboard/dist/NativeClipboardModule.js.
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.removeAllListeners = exports.addListener = void 0;
var react_native_1 = require("react-native");
var ClipboardTurboModule = react_native_1.TurboModuleRegistry.getEnforcing('RNCClipboard');
exports.default = ClipboardTurboModule;
var EVENT_NAME = 'RNCClipboard_TEXT_CHANGED';
var eventEmitter = new react_native_1.NativeEventEmitter(ClipboardTurboModule);
var listenerCount = eventEmitter.listenerCount;
// listenerCount is only available from RN 0.64
// Older versions only have `listeners`
if (!listenerCount) {
listenerCount = function (eventType) {
// @ts-ignore
return eventEmitter.listeners(eventType).length;
};
}
else {
listenerCount = eventEmitter.listenerCount.bind(eventEmitter);
}
var addListener = function (callback) {
if (listenerCount(EVENT_NAME) === 0) {
ClipboardTurboModule.setListener();
}
var res = eventEmitter.addListener(EVENT_NAME, callback);
// Path the remove call to also remove the native listener
// if we no longer have listeners
// @ts-ignore
res._remove = res.remove;
res.remove = function () {
// @ts-ignore
this._remove();
if (listenerCount(EVENT_NAME) === 0) {
ClipboardTurboModule.removeListener();
}
};
return res;
};
exports.addListener = addListener;
var removeAllListeners = function () {
eventEmitter.removeAllListeners(EVENT_NAME);
ClipboardTurboModule.removeListener();
};
exports.removeAllListeners = removeAllListeners;
Я добавил console.log(ClipboardTurboModule) в строку 5 и нашел в новом проекте, я получаю это
{"addListener": [Function nonPromiseMethodWrapper], "getConstants": [Function anonymous], "getImage": [Function promiseMethodWrapper], "getImageJPG": [Function promiseMethodWrapper], "getImagePNG": [Function promiseMethodWrapper], "getString": [Function promiseMethodWrapper], "getStrings": [Function promiseMethodWrapper], "hasImage": [Function promiseMethodWrapper], "hasNumber": [Function promiseMethodWrapper], "hasString": [Function promiseMethodWrapper], "hasURL": [Function promiseMethodWrapper], "hasWebURL": [Function promiseMethodWrapper], "removeListener": [Function nonPromiseMethodWrapper], "removeListeners": [Function nonPromiseMethodWrapper], "setImage": [Function promiseMethodWrapper], "setListener": [Function nonPromiseMethodWrapper], "setString": [Function nonPromiseMethodWrapper], "setStrings": [Function nonPromiseMethodWrapper]}
И старый вариант у меня такой.
{"getConstants": [Function anonymous], "getString": [Function promiseMethodWrapper], "hasString": [Function promiseMethodWrapper], "hasURL": [Function promiseMethodWrapper], "setString": [Function nonPromiseMethodWrapper]}
Вы можете сразу увидеть, что в старом проекте отсутствуют addListener и RemoveListeners, которые теперь необходимы для NativeEventEmitter. Поэтому моей следующей целью было выяснить, откуда взялся этот объект ClipboardTurboModule, и я думаю, что нашел его. Я думаю, это отсюда: ./ios/Pods/Headers/Private/React-Codegen/rnclipboard/rnclipboard.h. В новом проекте этот файл есть, а в старом его нет. Фактически, многих файлов кода здесь не существует.
[img]https://i.sstatic. net/IY485sQW.png[/img]
IDK, как это включить. Подфайлы для обоих практически идентичны (отличаются лишь некоторыми материалами Firebase). Я прошел массу настроек и этапов сборки, и они кажутся одинаковыми. Удаление папок узловых модулей, build и pods, а также файлов pnpm-lock.yaml и Podfile.lock и повторный запуск/установка/сборка всего этого не помогает. Не помогает.
Кроме того, похоже, это проблема только iOS.
Есть идеи? TIA
Шаги по воспроизведению
Я не могу воспроизвести это в новом проекте.
Затронутые платформы h3>
Только для iOS. Android выглядит нормально.
Вывод информации о реагировании npx
warn Package rn-fetch-blob contains invalid configuration: "dependency.hooks" is not allowed. Please verify it's properly linked using "npx react-native config" command and contact the package maintainers about this.
info Fetching system and libraries information...
System:
OS: macOS 14.5
CPU: (14) arm64 Apple M3 Max
Memory: 200.31 MB / 36.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 20.13.1
path: ~/.volta/tools/image/node/20.13.1/bin/node
Yarn: Not Found
npm:
version: 10.5.2
path: ~/.volta/tools/image/node/20.13.1/bin/npm
Watchman:
version: 2024.05.06.00
path: /opt/homebrew/bin/watchman
Managers:
CocoaPods:
version: 1.15.2
path: /opt/homebrew/bin/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 23.4
- iOS 17.4
- macOS 14.4
- tvOS 17.4
- visionOS 1.1
- watchOS 10.4
Android SDK: Not Found
IDEs:
Android Studio: 2023.2 AI-232.10227.8.2321.11479570
Xcode:
version: 15.3/15E204a
path: /usr/bin/xcodebuild
Languages:
Java:
version: 17.0.10
path: /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/bin/javac
Ruby:
version: 2.6.10
path: /usr/bin/ruby
npmPackages:
"@react-native-community/cli": Not Found
react:
installed: 18.3.1
wanted: 18.3.1
react-native:
installed: 0.74.1
wanted: ^0.74.1
react-native-macos: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: true
newArchEnabled: false
iOS:
hermesEnabled: true
newArchEnabled: false
Подробнее здесь: https://stackoverflow.com/questions/785 ... fferent-in