UrbanApps / Armchair

A simple yet powerful App Review Manager for iOS and OSX in Swift
MIT License
1.2k stars 137 forks source link

Armchair.debugEnabled(true) not working #30

Open ghost opened 8 years ago

ghost commented 8 years ago

My project is configured to enable debug:

On this issue https://github.com/UrbanApps/Armchair/issues/29 problem has been solved for Cocoapods. But what about Carthage?

coneybeare commented 8 years ago

Sorry, I am not familiar with Carthage so I don't have an exact answer, but you need to find a way to pass the compiler flags to whatever project is actually building the framework and pass the -DDebug flag there.

Please post back here for the benefit of others if you figure out how.

ghost commented 8 years ago

My first idea was to add this flag on the Armchair project. I am not familiar with Carthage too!

phimage commented 8 years ago

I think that the framework must not check "Debug" flag, but let the caller do the job It's more a main project issue to know the mode, the configuration bool is sufficient for the framework

in my code I prefer to use my own flag (name) put only in debug scheme, not in release

#if DEBUG // or TEST or TESTARMCHAIR
   Armchair.debugEnabled(true)
#endif

With dependencies manager like cocoapod or carthage it's seems not straightforward to add a compil flag automatically Even If we find a way, the flag will be put for debug and release and no more check will be done (even in release) except if there is config for each scheme...

I know that we could be disagree because have each time a prompt for rate in a release app will be a big annoyance and maybe many people then will give a lower rate because of that But I have trust in developpers, maybe I am wrong!!!


Other idea, keep the current code and add an other method not documented in README for instance unsafeDebugEnabled(..Bool) maybe a tag to make a warn when compiling


There is another issue that can fix this issue, debugEnabled is used for two things :

fotiDim commented 8 years ago

It is better to do a runtime check and not a compile time check

coneybeare commented 8 years ago

I disagree. This way automatically prevents log spam on production builds, even if the developer accidentally left in a debug line.

fotiDim commented 8 years ago

Doing this will solve the carthage issue. Otherwise you have to specify "carthage build -configuration Debug". I think it creates more confusion that the benefit it brings.

coneybeare commented 8 years ago

Well, my opinion is that it is still better the current way, but because the Carthage and Cocoapods frameworks don't seem to have easy support for adding compiler flags yet, I am open to changing it until they do.

Please feel free to send over a pull request removing the DEBUG flag behavior, and an updated README to reflect the changes.

inket commented 8 years ago

For now you can force debug mode by doing this

let manager = Manager.defaultManager
let ivar: Ivar = class_getInstanceVariable(manager.dynamicType, "debugEnabled")
let fieldOffset = ivar_getOffset(ivar)
let pointerToInstance = unsafeAddressOf(manager)
UnsafeMutablePointer<Bool?>(pointerToInstance + fieldOffset).memory = true
Paul-tag2me commented 8 years ago

To enable the debug mode of Armchair, you have to add --configuration Debug to your carthage build command