We encourage you to First read through this FAQ in One go ...
... thereafter to refer to it ...
ActiveDevelopers FAQ:
©Copyright May 11th. 1999, Inter*ACTIVE-Technology
Scope of Usability for ActiveDeveloper ...
1) Can I do API Experiments and Explorations - and Fast ?
2) Can I also do it inside of InterfaceBuilders TestMode ?
3) Can I Debug with ActiveDeveloper ?
4) Can I Develop Applications with ActiveDeveloper ?
5) Can I Develop Large-Scale Projects with ActiveDeveloper ?
Getting InterACTIVE with ActiveDeveloper ...
6) Project Activation - What is that ?
7) Project Activation - Partial or Complete ?
8) Project Image file - How to Create one ?
9) Project Launching - How to Connect to your Applications ?
Being InterACTIVE with ActiveDeveloper ...
10) How to -- Use Workspaces ?
11) How to -- Evaluate, Display and Inspect ?
12) How to -- Make appropriate Selections ?
13) How to -- Create and Load Class Definitions ?
14) How to -- Create, Load and Reload Categories ?
15) How to -- Control Automatic Header File Generation ?
Common Piftalls ....
16) Don't try to reload Class Definitions ...
17) Don't try to reload Global C-level Variables ... Use Static ...
Advanced Topics ....
18) Define Your Compilation Environment - in Preferences ...
19) SpeedUp Incremental Compilation ...
ActiveDevelopers FAQ:
Scope of Usability for ActiveDeveloper ...
1) Can I do small API Experiments and Explorations - and Fast ?
|
Yes, |
And it works right Out of the Box, NO Project Setups are required ...
With NO extra work - Both InterACTIVE API Experiments and Explorations
are possible with ActiveDeveloper. |
To directly set you InterACTIVE with the Frameworks without extra work, we
have provided the first two Examples of this:
- the ActiveDeveloperAppKitExplorer.app and
- the ActiveDeveloperIB.palette
+ an Activated WODefaultApp.woa is in the works.
AD.projectimages for both of these are preloaded with ActiveDeveloper
when you launch it - and All you must do to get InterACTIVE with them
is to Select them and click Start ....
Thereafter - all your Workspaces, ClassEditors or Inspectors are connected
to these Apps - and ActiveDeveloper has set you InterACTIVE with them.
It's Pretty Robust - so Don't worry about Breaking things - Just Focus
Your Energy on Playing with the Code. It takes quite some Effort to Kill them.
Referring to Bad Addresses or Sending Bad Messages just doesn't suffice ...
In addition, you can easily build your own APIExplorer Apps, to set you
InterACTIVE with other Libraries or Frameworks of your own too ...
All you have to do is once and for all Compile and Link a DefaultAPI.app
using your Libraries and Framework you want to InterAct with PLUS the
ActiveDeveloperLib. And create an AD.projectimage file to start it with.
For more information, check out the Item on Activation
and view the Demos for samples.
Back to Index
2) Can I also Experiment and Explore inside of InterfaceBuilders Test Mode ?
|
Yes, |
the ActiveDeveloperIB.palette is the BridgeHead that enables
exactly this. Think of it as an Activation of the InterfaceBuilder |
|
|
And, |
it is carefully Designed NOT to instantiate any Objects into your NIB's.
So you can open your NIB's any day - also if you should Ever choose
to Stop using ActiveDeveloper. There is NO ActiveDeveloper lock-in. |
First, you launch the InterfaceBuilder once as usual, to load the IBPalette into it,
to ensure that IB will later automatically load the IBPalette when launched ...
Thereafter, when you Start the ActiveDeveloperIBPalette projectimage, it
will launch the InterfaceBuilder together the IBPalette and connect it back to
ActiveDeveloper.
From there on, you get InterACTIVE with InterfaceBuilder. The doors are
open for Experiments as well as Development of GUI, Control or
BusinessLogic Code - right inside of IB's TestMode ...
- Wasn't this what you always wanted to ... ??
Back to Index
3) Can I Debug with ActiveDeveloper ?
|
Yes, |
it's also possible to use ActiveDeveloper when you are running
your Application under a GDB session ... |
Back to Index
4) Can I Develop Applications with ActiveDeveloper ?
|
Yes, |
and this is actually the main purpose of ActiveDeveloper. |
In Development, ActiveDeveloper is designed to fit in along side
ProjectBuilder, WebObjectsBuilder, InterfaceBuilder, et. al.
Being the Editor that turns you InterACTIVE with your projects, and
shifts your focus from SourceFiles and CompileTime onto
Live Objects and RunTime.
ActiveDeveloper works along with ProjectBuilder - where ActiveDeveloper
will be your InterACTIVE place for Editing and Object level Debugging and
ProjectBuilder will be your Makefile interface and low-level Debugging.
To start Developing with ActiveDeveloper, there is a small effort you have
to do in Activating your PB projects. This can be done either Completely
or Partially as it makes sense.
For Activation Examples, take a peek at our Demonstrations
Back to Index
5) Can I Develop Large-Scale Projects with ActiveDeveloper ?
|
Yes, |
due to it's Project concept, ActiveDeveloper functions equally well
in Large Scale Subproject structured or Bundle structured contexts
as it does in small Examples. |
And, with it''s Class and Category Editors, ActiveDeveloper
also gives you a Better overview of the Code inside their
Larger Source Files.
In a Large Scale projects with Multiple developer, ActiveDeveloper can be
used to different extents ...
Exclusively - developing all classes using ActiveDeveloper.
Partly - like more developers appreciating to use it for those parts
of their Code - where InterACTION really makes a difference.
Very Isolated - like only one single developer appreciating to use it
to solve Particular problems. This causes NO interference problems.
Back to Index
Getting InterACTIVE with ActiveDeveloper ...
6) Project Activation - What's that ?
Activation of a PB project for use with ActiveDeveloper is a simple four step process.
|
1) |
Add the ActiveDeveloperLib to the Projects libraries, and
incorporate a few lines of code into your Applications
Controller, to call the tiny ActiveDeveloper API. |
|
|
2) |
Activate those Class Concepts that you want to be able to
start InterACTIVE Editing with |
|
|
3) |
Rebuild and link the project with ProjectBuilder, as usual. |
|
|
4) |
Create one new AD.projectimage document for the project. |
Here step 2) contains the Bulk of the Activation.
Basically, to get InterACTIVE with ActiveDeveloper, you have to take advantage of
Class Categories, cause they are what's reloadable with ActiveDeveloper.
But actually - this is just good Objective-C practice anyhow.
This means, that you should create Separate file pairs for the Definition of
your Classes xxx.[hm] and for the Implementation of their Class Categories
class+xxx.[hm]. Thereafter, the Number of Class Categories you choose to
add together in each Category file pair is your choise.
At a first glance, it seems like ActiveDeveloper gives you more Source Files to
maintain. But this is not true. To compensate, ActiveDeveloper will Auto Generate
all your Header Files, since they contain mainly redundant information anyhow.
So, that should make us Equal again ... and end Double maintenance of Interfaces.
For Activation Examples, take a peek at our Demonstrations
Back to Index
7) Project Activation - Partial or Complete ?
In Activating a Project, it's your choise HOW many of your Class Concepts
it makes sense to Activate.
If you Activate them ALL - we call it a Complete Activation.
If you only Activate some - we call it a Partial Activation.
Whatever you choose, it makes NO difference for the Activation how your
PB project is structured - wheather there are many, few or no levels of
SubProjects.
But, if you are heavily into Bundles, then be aware, that you can only link
the ActiveDeveloperLib ONCE ... so, then it will fit best into your Applications
TopLevel Container project.
Back to Index
8) Project Image file - How to Create one ?
ActiveDeveloper relies on an AD.projectimage file to control InterACTIVE Editing
of your Project. In here you find two kinds of information:
- Launch information
- Compile information
Launch Information:
Create a new AD.projectimage file from the Menu, and add the following Launch Infos:
- Project Name
- Project Executable
Project Executable for YellowBox Apps:
1) Just enter your Executables Name (like "InterfaceBuilder") if you already
have it registered with the OperatingSystem.
2) Enter a relative path to your Executable as seen from the AD.projectimage
files directory (like "./MyApp.app/MyApp")
3) Enter a full Path to your Executable if you have to.
Project Executable for WebObjects Apps:
1) Enter a relative path to your Executable as seen from the AD.projectimage
files directory (like "./MyApp.woa/MyApp")
2) Enter a full Path to your Executable if you have to.
Note: WOF3.x applications demanded Commandline arguments, cause they
didn't yet have default server build-in. This is no longer needed in WOF4.x
But, to have WOF4.x apps launched correctly with ActiveDeveloper v.2.07
Please specify a Random argument anyway (like "-d xxx").
Compile Information:
For ActiveDeveloper to enable InterACTIVE Editing, please specify your Header, Library
and Framework directories in the AD.projectimage file. (They are not yet parsed in
directly from the PB.project files).
If your project is subproject structured, you only need ONE AD.projectimage file, but
for each subproject - add an Include path to it relative from the AD.projectimage
files directory.
The syntax for adding Headers, Libraries and Frameworks is quite simple. Place each
Directory on a single line as well as each Libray and Framework, like this:
-I./AnyDirectory.subproj
-L/Company/Library
-lOurLibrary
-F/Company/Frameworks
-framework OurFramework
If your Application takes command line arguments - like WOF3.x apps - you can
specify these in the Arguments TextView.
Verify your Information:
In the end - then Save your AD.projectimage file - and try to read it back in by
"Refresh from File" to verify that your Launch and Compile informations have
been accepted correctly ...
Back to Index
9) Project Launching - How to Connect to your Applications ?
|
First, |
you Launch the ActiveDeveloper IDE, |
Second, you Open your Apps AD.projectimage file with the IDE
|
Third, |
you Start your App using the Start button in the IDE |
Thereafter, all your Workspaces, ClassEditors and Inspectors are connected
to this Application under Development.
Using the "Start" Button in the IDE is the ONLY way to start an InterACTIVE
WorkSession with your Application. When you Launch your Application normally
it will also run normally - without connecting to the ActiveDeveloper IDE.
Like this you can have many Activated Applications in your Environment that
you use every day - and still run them In and Out of InterACTIVE WorkSessions
just as you like.
Here, the Distributed nature of the ActiveDeveloper shows itself. All your InterACTIVE
Development work is controlled by the ActiveDeveloper process and carried out
via PDO inside the Application process that you Develop.
The advantage of ActiveDevelopers Distributed nature is, that the IDE process
always survives - even if you manage to Kill your Application in Development.
Back to Index
Being InterACTIVE with ActiveDeveloper ...
10) How to -- use Workspaces ?
What's a Workspace ... ?
In the sense of InterACTIVE Editing our Concept of a Workspace - is simply a
Place where you can Edit code and have it Executed immediately.
No matter what the Scope happens to be in that Place.
In that sense ALL Windows within ActiveDeveloper are Workspaces - cause
Everything is connected and InterACTIVE with your Application under Development.
But, what's the WorkspaceEditor then ... ? That's your New Friend ...
It's an InterACTIVE Place for Code that doesn't directly make it into Production.
1) Some Workspaces are Playfields for new Code, and will Loose
their importance over time, once you have Understood their Code
and incorporated the Essense of it into Concepts of your
Production Code.
2) Other Workspaces Live on forever, containing your Hooks to
Setup and initialize object structures in your Project Environment.
Exactly those 15 small Project related calls, that you use day in
and day out. And the same 15 small calls, that your Colleagues
would pay a Beer for having Assembled in one common Place
the day You are Out or Sick, and something Absolutely have
to be Fixed in Your code ...
The WorkspaceEditor opens and works with *.wsp files, that you are Editing
in two Separate Views. The Contents of the Upper Text Object are used as
#import header for ALL Evaluation, Display and Inspection you perform.
Down in the WorkspaceEditors Lower Text Object, you are free to Select
Compound Objective-C Statements where ever you feel like it.
All Evaluation, Display and Inspect executions done from a WorkspaceEditor
are done in Global Scope - unless you set a Specific Qualified Class Scope.
Back to Index
11) How to -- Evaluate, Display and Inspect ?
ActiveDeveloper sets you InterACTIVE with your Application in Development,
from every Editable Window - and with Edit-Compile-Play cycles in Seconds.
There are basically three ways you can have Code Executed, they are:
Evaluate -- Compiles and Executes your code within the Scope, where it
is Selected. This makes sense whenever you just want to Change State
or Create some Side-Effects. The return Value of your code is Ignored.
Display -- Compiles and Executes your code within the Scope, where it
is Selected. The Resulting Value of your Selected code, which is
regarded as anObject or nil, is then Transcribed into an NSString
and showed in the System Transcript. (Using the -description method)
Inspect -- Also Compiles and Executes your code within the Scope where it
is Selected. The Resulting Value of your Selected code, which is
regarded as anObject or nil, is then added to a Hierarchical Object
Browser and Inspector. From here you can then continue to work with
the Resulting Value, see it's Instance Variables and also Browse
around the entire Object Graph behind this object.
These three ways of Executing code are basically working Everywhere you can
See or Edit code. And to apply them, you simply Select the code you want to
run and immediately you can have it Executed in one of these ways - voila -
even within the Object Browsers Text Object ....
The only thing that changes from Window to Window is Scope.
- Workspaces have Global Scope
- ClassEditors have Class Scope
- ObjectBrowsers have Object Scope
- and Workspaces can have Qualified Class Scope
if you set one ...
Back to Index
12) How to -- Make appropriate Selections ?
With ActiveDeveloper, you can select Code-Snips anywhere in All Windows
- as long as your Selections contain a valid ObjC Compound Statement.
Here are three simple, but illustrative Examples:
[NSArray arrayWithObjects: @"First", @"Second", nil];
return [NSArray arrayWithObjects: @"foo", @"bar", nil];
id result;
result = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];
If you select a Statement in the middle of a method, ActiveDeveloper will
append a return on the fly. If your Selections goes all the way down to the
end and includes a return on the last line, then there is no need for that.
- but don't include a number of empty lines at the buttom of your Selection.
Finally, if you want to Define Local Variables, you simply have to do this
before the first real Statement - just like you would inside a Method Scope.
Back to Index
13) How to -- Create and Load Class Definitions ?
With the ClassEditor of ActiveDeveloper you can Create New Class Definitions
in Source Code form, and have them Loaded directly into your Application
under Development.
We have provided you with a default Template for Class Definitions, that
you can Customize in the NIB file, if you have a Better taste for how a
Class Definition Template should look like.
For every InterACTIVE session, please remember to Load your Custom
Class Definitions before you try to Extend these with Class Categories.
Cause, trying to Extend a Non Existing Class doesn't make much sense.
The ClassEditor opens *.m files and whenever you Save them back, it
will also Auto Generate their accompanying Header files *.h.
For further Details: See Header File Creation:
Back to Index
14) How to -- Create, Load and Reload Categories ?
With the ClassEditor of ActiveDeveloper you can also Create Class Categories
and have them Loaded directly into your Application under Development.
We have provided you with a default Template for Class Categories, that
you can Customize in the NIB file, if you have a Better taste for how a
Class Category Template should look like.
For ActiveDeveloper it only makes Sense for you to Load Categories onto
Existing Classes. So, if you are Extending Custom Classes, please Load
their Class Definitions first - but if you are Extending Linked Framework or
Library Classes - then please go ahead directly.
The ClassEditor also opens Categories from *.m files and whenever you
Save them back, it will also Auto Generate their accompanying Header files *.h.
For further Details: See Header File Creation:
Back to Index
15) How to -- Control Automatic Header File Generation ?
With the ClassEditor you Edit both Class Definitions and Class Categories,
and when you Save them Back, ActiveDeveloper will also Automatically
Generate their accompanying Header files *.h.
For both these Editors, the complete description is composed of 4 TextViews.
|
Right: |
On the Right side is always the complete Implentation description.
Contents of this TextView will be Saved into the Implementation files *.m |
|
|
Left: |
On the Left side the Interface description is split up into 3 sections. |
1) The upper Interface view goes first into the Header and is thought
for #imports, #defines and ModuleScope variables. 2) The middle Interface view is Auto-Extracted Object level Inteface
code extracted from the Right Implementation view - and goes
second into the Header. 3) The buttom Interface view goes last into the Header and is used
in Class files to #imports of ClassCategory headerfiles. Hereby
it's achieved to make the Class / Category splitup of InterACTIVE
editing transparent in your API''s ...
Outline Please Use and Enjoy the left Interface side as an Outline View
of your Source Files ... move around your code from Method to
Method by clicking on their interfaces in the Middle view ...
Class Definition Interface Conversion:
ActiveDeveloper converts your Class @implementation Definitions
to form Identical Class @interface Definitions.
Class Category Interface Extraction:
ActiveDeveloper extracts Class Category @interface's from your
Class Category @implementations.
Method Declaration Extraction:
ActiveDeveloper extracts Method Declarations from your Method
Implementations. This is done by selecting all Method Impementations
having +/- as First character on the line, and transcribing these up
until and including any eventual SemiColon ;
To keep some Methods Private, simply put a Space before their +/-.
To Implement short Methods in One line of code, eg.Setters/Getters,
simply remember the SemiColon before the Implementation { }.
To make Classes conform to Protocols, please put the <protocol>
conformance behind a // comment on the Class @implementation
definition line, as below:
@implementation MyClass : NSObject // --- <protocol> ----
.....
@end
Back to Index
Common Pitfalls ...
16) Don't try to reload Class Definitions ...
In this current version of ActiveDeveloper you can Create
and load Class Definitions on the fly, but you can't reload them.
When you need to change Instance Variables or Inheritance structures,
this is the only times where you have to Restart your App in Development.
In our Experience - Inheritance Structures don't change that often, So.
If however yours does. The Best way around to stay InterACTIVE as long as
possible will be to keep one or two Extra Instance Variables in the Classes you
are Developing InterActively. Then, later when you need it, you can start
accessing them via Setters and Getters - in your New Names - to stay
InterACTIVE longer.
And, the next time it's convenient to Rebuild the Project, you Rename the
Extra IVars to their New Names too ...
Back to Index
17) Don't try to reload Global C-level Variables - Use Static ...
If you have Global C-Level Names inside a Class Category File, this
will disable your ability to reload newer Class Category versions.
Therefore we suggest you make those Names static, that you don't
refer to elsewhere - and that you place those Names, that you do
refer to elsewhere - in the Class Definition file ...
Back to Index
Advanced Topics ....
18) Define Your Compilation Environment - In Preferences ...
ActiveDeveloper can be Customized to fit into your Compilation Environment.
You can set Compiler options, add Include Directories and link Frameworks.
This is all done using it's Preference Editor.
- OtherCFlags: Here you can specify Compiler Options (like -O)
- OtherIncludes: Here you can add Include Directories (like -I.) to
match your #import Statements
NB: In Beta4 ActiveDeveloper takes care of the Current Directory where
your Workspace of Class/Category is stored. You have to add all other
Custom Directories ... it's NOT aware of what you specify in PB.project.
Back to Index
19) SpeedUp Incremental Compilation ...
Please be aware that Compilation directly on the Local Harddisk of your
Computer can be signifficantly Faster than on a Network mounted Drive.
Therefore, we suggest you choose your Compilation Area somewhere on
your Computers Local Harddisk, when you specify it in ActiveDevelopers
Preference Editor.
Back to Index
*) ProjectBuilder and InterfaceBuilder are Registered Trademarks of Apple Compter.
|