Comments (7)
Ha, It's a known potential issue, the category would be in a separate file from the class right? Is this on device? If you roll me a small example project I can look at it for you. There should be a way if you think it's important. I'm a little surprised the category methods aren't returned by class_copyMethodList()
.
from hotreloading.
Yes, it's on device. Here is the demo. You can check the DemoViewController+Debug
.
I debug the HotReloading
, and found it may not because of the class_copyMethodList()
.
The below function return [], so it didn't execute the following code.
@objc override open func extractClasses(dl: UnsafeMutableRawPointer,
tmpfile: String) throws -> [AnyClass] {
var classes = [AnyClass]()
SwiftTrace.forAllClasses(bundlePath: searchLastLoaded()) {
aClass, stop in
classes.append(aClass)
}
if classes.count > 0 && !SwiftTrace.deviceInjection {
print("\(APP_PREFIX)Loaded .dylib - Ignore any duplicate class warning ⬆️")
}
return classes
}
from hotreloading.
Thanks for the project but there is something odd about it which I can't figure out and be able to debug it. Anyways.. Are you absolutely sure categories aren't injecting? When you load a category the new implementation is always updated on the class, in fact, this is how the very original version of injection worked. The injection code doesn't need to do anything.
from hotreloading.
For more information, I use the build phase to trigger InjectionServer instead of the InjectionIII App on the github. If I inject in a category DemoViewController+Debug
, can't get a class like beblow.
What else can I provide to help confirm the case?
from hotreloading.
You won't get the class but categories inject automatically themselves as part of being dynamically loaded. Edit the print message in your category and verify if it is being updated when you call it (it was for me in my test project). Injection has to swizzle classes as there can be instances outstanding on the class with their own "isa" pointing to the oldClass..
from hotreloading.
Got it, I was misled by the following message 😅.
🔥 ⚠️ Injection may have failed. Have you added -Xlinker -interposable to the "Other Linker Flags" of the executable/framework? ⚠️
Thanks for your patience.
from hotreloading.
Nothing is worse than a bogus message... I've pushed a commit which should silence it when there are categories present.
from hotreloading.
Related Issues (20)
- Problems using HotReloading as a Swift package HOT 4
- iOS device injection not working when running as a Mac app HOT 17
- Updates overlap in UI HOT 1
- Some questions about the implementation. HOT 1
- Crasing in SwiftInjection HOT 25
- Is there anyway to re-compile a file only when cmd + s ? HOT 3
- cold start on device encounter watch dog HOT 13
- Hot reloading not changing my views HOT 6
- Does it support C functions 、variable in other files? HOT 7
- Will the DDHotKey affect the file watch ? HOT 6
- Cannot use HotReloading with Other debug configurations (ex. Dev, Test Configuration) HOT 12
- Xcode 15 beta link SwiftTrace failed HOT 8
- Hot reloading failing on real iOS device HOT 12
- Connection refused HOT 12
- Cannot reload on M1, getting an “eval101.dylib” can’t be opened because Apple cannot check it for malicious software error. HOT 21
- lopen() error: dlopen(/private/var/mobile/Containers/Data HOT 2
- Cannot reload on M1: Mac os Sonoma prevents InjectionIII from accessing data HOT 3
- Loading .dylib has failed, This is likely because Swift code being injected references a function using a default argument or a member with access control that is too restrictive or perhaps an XCTest that depends on code not normally linked into your application. Rebuilding and re-running your project (without a build clean) can resolve this. HOT 8
- Custom DerivedData folder breaks hot reloading HOT 8
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from hotreloading.