Porting CLIPS to iOS, compiling under Objective-C.

1,636 views
Skip to first unread message

JCL

unread,
Jan 10, 2012, 1:50:38 PM1/10/12
to CLIPSESG
Greetings:

I'm not a CLIPS expert so this may be a dumb question. Can somebody
provide me with any suggestions on how to compile CLIPS under
Objective-C? Theoretically, Objective-C is supposed to compile C
source code in.

Desired end goal:
I'd like to use CLIPS inside my iOS apps as a rules engine because the
logic portion of the apps is becoming too complicated (too many IF /
THEN / CASE).

This is what I'm envisioning:
* Learn to compile the CLIPS source code into an iOS "framework" than
can then be loaded into an iOS project under Xcode.
* Define all my apps' rules as plain text *.clp files inside each
app's "bundle"
* From the app's code (Objective-C), make a call to the CLIPS
framework, specifying: rules file to process; and pointer to object
containing the record to compare against the rules file.
* The CLIPS framework will return the results back to the Objective-C
code for further processing by the app.

Does it make sense? Is this possible?


If I may say so, this approach could bring a lot of new developers
(and users) to CLIPS. There are tens of thousands of iOS app
developers, and the level of complexity of those apps is growing
exponentially. Particularly in the case of games.

I'd think that a powerful, small, embedded rules engine such as CLIPS
would be hugely appealing to iOS developers. Just a thought.

Thank you.

JCL

Lode Hoste

unread,
Jan 10, 2012, 2:18:39 PM1/10/12
to clip...@googlegroups.com
Dear JCL,

It is definitely possible, I already used CLIPS both on iOS and Android devices.
I approached it by compiling CLIPS as a static library using the iOS
cross compiler via a custom Makefile.

However, if you use CLIPS as it is, you might even be able to just
import the CLIPS xcode project as a dependency in an iOS project (I
did not try this myself).
Note that for the iOS simulator you need to compile for i386 and for
the phones you need armv6 and armv7.

Feel free to post questions if you get stuck.

2012/1/10 JCL <afgha...@mypacks.net>:

> --
> You received this message because you are subscribed to the Google Groups "CLIPSESG" group.
> To post to this group, send email to CLIP...@googlegroups.com
> For more options, visit this group at http://groups.google.com/group/CLIPSESG?hl=en
>
> --> IF YOU NO LONGER WANT TO RECEIVE EMAIL <--
> Visit this group at http://groups.google.com/group/CLIPSESG?hl=en
> Click on "Edit my membership" link.
> Select the "No Email" radio button.
> Click the "Save these settings" button.
>
> --> IF YOU WANT TO UNSUBSCRIBE <--
> Visit this group at http://groups.google.com/group/CLIPSESG?hl=en
> Sign in
> Click on "Edit my membership" link.
> Click the "Unsubscribe" button.
> Note: This appears to be the most reliable way to unsubscribe
>
> Alternately, send email to CLIPSESG-u...@googlegroups.com. You will receive an email which you must respond to as well to unsubscribe. Clicking the link mentioned in the unsubscribe reply does not appear to work reliably.

CLIPS Support

unread,
Jan 10, 2012, 2:55:52 PM1/10/12
to CLIPSESG
There's an Xcode project here (http://sourceforge.net/projects/
clipsrules/files/CLIPS/6.30/CLIPS_6.30_Beta_Mac_OS_X_Installer_R1.pkg/
download) that includes CLIPS as a framework used by the other
projects. You may be able to use this as the basis for your iOS
project. To get it to compile as a Mac OS X project, I had to update
the base SDK to 10.6 and the deployment target to 10.5

JCL

unread,
Jan 12, 2012, 12:46:41 AM1/12/12
to CLIPSESG
Thank you all for your notes. This is where I'm at at this time (this
may be useful to other folks int he future):

* Downloaded the file you mentioned
(CLIPS_6.30_Beta_Mac_OS_X_Installer_R1.pkg) from
http://sourceforge.net/projects/clipsrules/files/CLIPS/6.30/

* Then unzip "Source Code.zip" file

* Open "CLIPS.xcodeproj" in Xcode

* For each of the 03 targets:
+ set architecture to "64-bit Intel"
+ set Base SDK to "Mac OS X 10.6" (or whatever the latest Mac OS X
version you have)

At this time I'm able to compile and run all 03 targets under Mac OS
X. Next is:
* trying to compile the framework for iOS
* integrating the CLIPS framework with my Obj-C app
* passing facts to the CLIPS framework, read *.clp files off the app's
bundle, and send results back to the app.

I'm keeping notes of everything I do, and will be happy to post the
final document here if anybody is interested.

Comments welcome. Regards.

Prana Adikhrisna

unread,
Jan 12, 2012, 3:38:30 AM1/12/12
to CLIPSESG
Hi Lode,

This may be off the topic, but I'm interested in how CLIPS is used for
Android. Do you mind sharing some knowledge on how to do that? :D

Thanks

On Jan 10, 2:18 pm, Lode Hoste <zill...@gmail.com> wrote:
> Dear JCL,
>
> It is definitely possible, I already used CLIPS both on iOS and Android devices.
> I approached it by compiling CLIPS as a static library using the iOS
> cross compiler via a custom Makefile.
>
> However, if you use CLIPS as it is, you might even be able to just
> import the CLIPS xcode project as a dependency in an iOS project (I
> did not try this myself).
> Note that for the iOS simulator you need to compile for i386 and for
> the phones you need armv6 and armv7.
>
> Feel free to post questions if you get stuck.
>
> 2012/1/10 JCL <afghan26...@mypacks.net>:
> > For more options, visit this group athttp://groups.google.com/group/CLIPSESG?hl=en
>
> > --> IF YOU NO LONGER WANT TO RECEIVE EMAIL <--
> > Visit this group athttp://groups.google.com/group/CLIPSESG?hl=en
> > Click on "Edit my membership" link.
> > Select the "No Email" radio button.
> > Click the "Save these settings" button.
>
> > --> IF YOU WANT TO UNSUBSCRIBE <--
> > Visit this group athttp://groups.google.com/group/CLIPSESG?hl=en

Lode Hoste

unread,
Jan 12, 2012, 5:38:00 AM1/12/12
to clip...@googlegroups.com
As mine was pretty customized, I prepared a new generic CLIPS Makefile
to do cross-compilation for the Android platform.
I uploaded it to: http://wise.vub.ac.be/~lhoste/public/Makefile


2012/1/12 Prana Adikhrisna <rp.adi...@gmail.com>:

> For more options, visit this group at http://groups.google.com/group/CLIPSESG?hl=en


>
> --> IF YOU NO LONGER WANT TO RECEIVE EMAIL <--

> Visit this group at http://groups.google.com/group/CLIPSESG?hl=en


> Click on "Edit my membership" link.
> Select the "No Email" radio button.
> Click the "Save these settings" button.
>
> --> IF YOU WANT TO UNSUBSCRIBE <--

> Visit this group at http://groups.google.com/group/CLIPSESG?hl=en

JCL

unread,
Jan 17, 2012, 5:47:11 PM1/17/12
to CLIPSESG
Thank you all for your notes. This is where I'm at at this time (this
may be useful to other folks in the future):
* I successfully compiled CLIPS as a "framework" for iOS
* I integrated the CLIPS framework with my Obj-C project under Xcode
4.2 and iOS 5
* I am able to pass facts to the CLIPS framework, and read *.clp files
off the app's bundle.
* I can see the results of "printout" statements on the RHS when the
rules on the *.clp file fire.

- - - Here's the Objective-C code that works for me thus far - - -

#import <CLIPS_iOS/clips.h>

// - - - - - CLIPS' functions. - - - - -
//
// Clean up the CLIPS environment.
InitializeEnvironment();
Clear();

// Define the location of the rules file inside the app's "bundle"
directory:
NSString *filePath = [[NSBundle mainBundle]
pathForResource:@"test" ofType:@"clp"];

// Load the content of the rules file:
NSData *myData = [NSData dataWithContentsOfFile:filePath];
//
// Check to see if there was data to load from the rules file:
if (myData) {
//
NSLog(@"File to load %@", filePath);
//
// CLIPS seems to require that strings be passed as C type
"char" as opposed to iOS' NSString.
const unsigned char *clipsFileChar = (const unsigned char *)
[filePath cStringUsingEncoding:NSASCIIStringEncoding];
//
/
*============================================================*/
/* Disable garbage collection. It's only necessary to disable
*/
/* garbage collection when calls are made into CLIPS from an
*/
/* embedding program. It's not necessary to do this when the
*/
/* the calls to user code are made by CLIPS (such as for */
/* user-defined functions) or in the case of this example, */
/* there are no calls to functions which can trigger garbage
*/
/* collection (such as Send or FunctionCall. */
/
*============================================================*/
IncrementGCLocks();

// Here we load the rules file:
Load(clipsFileChar);
//
// NOW we assert a fact (passed on from the iOS application)
// HERE is where you take the record you want to run against
the rules file and pass it on to CLIPS!
AssertString("(person (user_firstname Mike) (user_cohort 1910)
(results Here))");
//
// Then we "run" the rules against the fact we passed above:
int *numberRulesFired = Run(-1);
//
// OPEN ITEM: How to receive the text of the rules fired BACK
into the iOS app?
//
// This tells us the number of rules that were activated, or
"fired"
NSLog(@"Number of rules that fired: %d", numberRulesFired);
//
//
/
*==========================================================*/
/* Enable garbage collection. Each call to IncrementGCLocks */
/* should have a corresponding call to DecrementGCLocks. */
/*==========================================================*/
DecrementGCLocks();
//
}
else {
//
// In case the app could not open the file containing the
rules:
NSLog(@"Could not find file %s", filePath);
}
// - - - - -

- - - - - End of code - - - - -

- - - - - Here's the test.clp file - - - - -

;
(deftemplate person "Definition of a Person object"
(slot user_firstname)
(slot user_cohort)
(multislot results) ; I'm trying to pass results back to iOS
through this slot. Dumb?
)
;
;;; ======================================================
;
;;; - - - [Cohort Module] - - -
;
(defrule cohort-module-1910 "1910 cohort"
(person (user_cohort 1910))
(person (user_firstname ?user_firstname))
(person (results ?results))
=>
(printout t "Hello, " ?user_firstname ", how are you today?" crlf)
(printout t "Tell us about your family's life during World War I."
crlf)
(assert (results "Tell us about your family's life during World War
I."))
; Do I use these "assert" commands to pass the results of the rules'
firings BACK to iOS?
; How do I read these values from iOS? Using DATA_OBJECT?
)
;

- - - - - End of test.clp - - - - -


Question:

I do have a follow up question to you all: how do I capture the
_results_ of all the rules that fired and send those results back to
my iOS app?

Specifically: I have hundreds of rules, and a single "fact" can
trigger dozens of rules. How can I pass the results (meaning, the RHS
actions) of all those fired rules back to iOS?


I'll be happy to post my full notes here if anybody is interested.
Thanks.

Lode Hoste

unread,
Jan 18, 2012, 4:32:28 AM1/18/12
to clip...@googlegroups.com
One of the better ways to do this is adding your own user functions to CLIPS.
e.g. EnvDefineFunction2(theEnv,"+", 'n',PTIEF AdditionFunction,
"AdditionFunction", "2*n");
Whenever you use '+' in your rules, the additionfunction is called.

For information on how to use EnvDefineFunction2, see extnfunc.h,
bmathfun.c and the Advanced Programming Guide (Volume II).


2012/1/17 JCL <afgha...@mypacks.net>:

CLIPS Support

unread,
Jan 18, 2012, 2:53:45 PM1/18/12
to CLIPSESG
Take a look at the CLIPSJNI examples, http://sourceforge.net/projects/clipsrules/files/CLIPS/6.30/.
The example applications are written in Java, but the principles are
the same for iOS or any other framework where you're wrapping a GUI
around CLIPS. Use the CLIPS eval function to evaluate a fact-set query
function (or deffunction) which returns a set of facts that your
embedded GUI uses to determine the current state.

Coche

unread,
May 27, 2012, 8:59:31 PM5/27/12
to clip...@googlegroups.com
Hey JCL , 
I just get to this group looking for help on successfully using CLISP framework with an iOS App.
I read all your post of advance, and I'm wondering how far did you get, and if you could share with me some of your notes
that can help me go through this. 
I look forward to your response.

Mikael

unread,
Dec 4, 2012, 8:26:04 AM12/4/12
to clip...@googlegroups.com
Hello,

could you send me your solution for CLIPS in iOS ? I am trying to make it by myself, but without any results... Thanks

Stephane Yong wai man

unread,
Dec 23, 2012, 6:53:04 PM12/23/12
to clip...@googlegroups.com
Hi Mikael,

I am also looking for a way to use CLIPS on IOS. Were you able to make it work ? If so could you share some advice and tips ?
Thx.
St.

Chris Koncur

unread,
Aug 15, 2013, 11:44:36 AM8/15/13
to clip...@googlegroups.com
JCL,

Have you had any progress in this effort? I am also looking to incorporate CLIPS as a framework for native IOS apps and would be interested to see how you made out.

Ted Neward

unread,
Aug 15, 2013, 4:27:44 PM8/15/13
to clip...@googlegroups.com

Somebody want to start a GitHub or other open project to do this? I’d contribute. (Had the same thought for a while now.)

 

Ted Neward

Leading, Speaking, Consulting, Writing

http://www.tedneward.com

 

--

You received this message because you are subscribed to the Google Groups "CLIPSESG" group.
To post to this group, send email to CLIP...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/CLIPSESG?hl=en
 
--> IF YOU NO LONGER WANT TO RECEIVE EMAIL <--
Visit this group at http://groups.google.com/group/CLIPSESG?hl=en
Click on "Edit my membership" link.
Select the "No Email" radio button.
Click the "Save these settings" button.

--> IF YOU WANT TO UNSUBSCRIBE <--
Visit this group at http://groups.google.com/group/CLIPSESG?hl=en
Sign in
Click on "Edit my membership" link.
Click the "Unsubscribe" button.
Note: This appears to be the most reliable way to unsubscribe
 
Alternately, send email to CLIPSESG-u...@googlegroups.com. You will receive an email which you must respond to as well to unsubscribe. Clicking the link mentioned in the unsubscribe reply does not appear to work reliably.

---

You received this message because you are subscribed to the Google Groups "CLIPSESG" group.

To unsubscribe from this group and stop receiving emails from it, send an email to clipsesg+u...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Joshua Scoggins

unread,
Aug 16, 2013, 5:58:32 PM8/16/13
to clip...@googlegroups.com
While I don't have any modern iOS devices, I did make a framework for OSX out of the clips source code (may have been my
fork of clips). I'll dig up the code on my mac mini and post it on my github account when I get home from work tonight. While it isn't
for iOS specifically, it will work with Objective-C and it is a good place to start. You would have to redefine the io routers to
output to the screen but it could be done (I did it for quake2 so I know its easy :D)

Just remember that Apple will require you to either use binary load/save or a runtime module. I know they will not allow apps with
interpreted code on the app store. I'm not trying to deter anyone, I just want people to know what they may get themselves into.

-Joshua Scoggins

Joshua Scoggins

unread,
Aug 17, 2013, 1:34:46 AM8/17/13
to clip...@googlegroups.com
Alright, I posted the code to github. It should work with xcode, if someone wants to write a
makefile I will be glad to merge it into the mainline. It turns out that I added NSLog IO router
support already as well as a CLIPSEnvironment class for objc (it was a while ago).

http://github.com/DrItanium/CLIPS-Cocoa

I hope this helps someone out. Happy Hacking :D

-Joshua Scoggins

Ted Neward

unread,
Aug 17, 2013, 4:51:19 AM8/17/13
to clip...@googlegroups.com

It would seem to me that a starting point for an iCLIPS (somebody please come up with a better name) would be to simply create an app that is all one giant text area, and run CLIPS in there essentially in the same UI style as the command-line console app version. It would be cool if the app could then (as a v1.1 feature) integrate with Dropbox or something so as to be able to run CLIPS files out of a user’s Dropbox, rather than having to type them in by hand each time.

 

Apple has allowed other interpreter applications onto the iOS platform (see Gambit Scheme, Try F#, and so on), but I don’t know if there’s some kind of magic technical trick that those apps are using to bypass Apple’s weird restrictions. (Try F#, for example, I’m pretty sure is compiling the code on a Microsoft server and just essentially piping “stdin” and “stdout” over the web to that server, since I’m 98% certain that Don Syme and associates didn’t rewrite/port the compiler to iOS.) That said, though, I’d still be happy with a version that I have to compile on my own box and side-load onto whatever device I want to use it on; somehow, I don’t see this as being a #1-bestselling iPhone app anytime soon, even if we did get Apple’s approval to put it into the AppStore. :-)

 

If somebody builds this for iOS, I’ll take it as a longer-term action item to do a similar version for Android. (Compile the core CLIPS engine to a .so using the Android NDK, then build a dirt-simple Android UI for it, just the same as the above.) I just don’t have the time to do it right this month. :-/

 

Ted Neward

Leading, Speaking, Consulting, Writing

http://www.tedneward.com

 

Artem Novikov

unread,
Aug 17, 2013, 1:53:20 PM8/17/13
to clip...@googlegroups.com
Some time ago, I wrote a CLIPSShell. It's based on Qt and can run on iOS.
http://sourceforge.net/projects/clipsshell

CLIPS Support

unread,
Aug 20, 2013, 10:43:54 PM8/20/13
to clip...@googlegroups.com
I uploaded an Xcode 4.6 project (clips_mab_ios_0_1.zip) at https://sourceforge.net/projects/clipsrules/files/CLIPS/Misc/. It shows how to link the CLIPS code into a static library, load a CLIPS file containing rules, and redirect output to a UITextView.

CJK

unread,
Aug 22, 2013, 1:32:30 PM8/22/13
to clip...@googlegroups.com
Having some issues baking this into a storyboard with a UITextView on the viewController. outputView doesnt seem to be available no matter what I do. Any suggestions?

BTW AMAZING WORK

CJK

unread,
Aug 22, 2013, 1:37:20 PM8/22/13
to clip...@googlegroups.com
I have a Main_iPhone Storyboard with multiple named ViewControllers, your AppDelegate .h/.m

////  ThirdViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (strong, nonatomic) IBOutlet UITextView *outputView;

@end


==========

////  ThirdViewController.m

#import "ThirdViewController.h"

#import <UIKit/UIKit.h>


@interface ViewController ()


@end


@implementation ViewController


- (void) viewDidLoad

  {

   [super viewDidLoad];


   // Do any additional setup after loading the view, typically from a nib.

  }


- (void) didReceiveMemoryWarning

  {

   [super didReceiveMemoryWarning];

   // Dispose of any resources that can be recreated.

  }


@end

=================

//

//  AppDelegate.h

#import <UIKit/UIKit.h>


@class ViewController;


@interface AppDelegate : UIResponder <UIApplicationDelegate>


@property (strong, nonatomic) UIWindow *window;


@property (strong, nonatomic) ViewController *viewController;


@end

==========

//AppDelegate.m


#import "AppDelegate.h"

#import "ThirdViewController.h"


#import "clips.h"



@implementation AppDelegate

@synthesize window = _window;


///ADDED

- (void)applicationWillResignActive:(UIApplication *)application

{

    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.

    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.

}


- (void)applicationDidEnterBackground:(UIApplication *)application

{

    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.

    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.

}


- (void)applicationWillEnterForeground:(UIApplication *)application

{

    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.

}


- (void)applicationDidBecomeActive:(UIApplication *)application

{

    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.

}


- (void)applicationWillTerminate:(UIApplication *)application

{

    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.

}


// END ADDED



/************************/

/* QueryInterfaceRouter */

/************************/

intBool QueryInterfaceRouter(

  void *theEnv,

  char *logicalName)

  {

   if ( (strcmp(logicalName,"stdout") == 0) ||

        (strcmp(logicalName,WPROMPT) == 0) ||

        (strcmp(logicalName,WTRACE) == 0) ||

        (strcmp(logicalName,WERROR) == 0) ||

        (strcmp(logicalName,WWARNING) == 0) ||

        (strcmp(logicalName,WDISPLAY) == 0) ||

        (strcmp(logicalName,WDIALOG) == 0) )

     { return(TRUE); }


    return(FALSE);

  }


/************************/

/* PrintInterfaceRouter */

/************************/

int PrintInterfaceRouter(

  void *theEnv,

  char *logicalName,

  char *str)

  {

   NSString *theStr = [NSString stringWithCString: str encoding: NSUTF8StringEncoding];

   

   if (str == nil)

     { return(FALSE); }

          

   AppDelegate *theAD = (__bridge AppDelegate *) GetEnvironmentRouterContext(theEnv);

   

   theAD.viewController.outputView.text = [theAD.viewController.outputView.text stringByAppendingString: theStr];


   return(TRUE);

  }


/**********************************************/

/* application:didFinishLaunchingWithOptions: */

/**********************************************/

- (BOOL) application: (UIApplication *) application didFinishLaunchingWithOptions: (NSDictionary *) launchOptions

  {

   void *theEnv;

   

   /*self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

  

      // Override point for customization after application launch.

   if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)

     { self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil]; }

   else

     { self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil]; }

   self.window.rootViewController = self.viewController;

   [self.window makeKeyAndVisible];

   */

      

   theEnv = CreateEnvironment();

   if (theEnv == NULL) return YES;


   EnvAddRouterWithContext(theEnv,"CLIPSSimpleOutput",10,QueryInterfaceRouter,PrintInterfaceRouter,

                           NULL,NULL,NULL,(__bridge void *)(self));


   NSString* filePath = [[NSBundle mainBundle] pathForResource: @"mab" ofType:@"clp"];

   char *cFilePath = (char *) [filePath UTF8String];

   EnvLoad(theEnv,cFilePath);


   EnvReset(theEnv);

   EnvRun(theEnv,-1);


   return YES;

  }


@end


CLIPS Support

unread,
Aug 22, 2013, 4:32:31 PM8/22/13
to clip...@googlegroups.com
Did you connect the outputView outlet to the UITextView in the storyboard? Click on the storyboard, click on the viewController, select the connection inspector in the utilities pane, and then click on the outputView outlet and drag the connection to the UITextView.

CJK

unread,
Aug 22, 2013, 4:39:14 PM8/22/13
to clip...@googlegroups.com
Thats the thing... in storyboard I cant get the outputView to show in outputView to show as an outlet (unlike in XIB example )

CLIPS Support

unread,
Aug 22, 2013, 5:00:29 PM8/22/13
to clip...@googlegroups.com
I created a new Single View Application with storyboards and added this single line to the viewController.h file:

   @property (strong, nonatomic) IBOutlet UITextView *outputView;

The outlet shows up when I click on the storyboard.

It's hard to say what could be wrong without any description of the attributes of the storyboard. It could be that the Custom Class for the view controller is set to the wrong class.

CJK

unread,
Aug 22, 2013, 5:05:01 PM8/22/13
to clip...@googlegroups.com
Exactly what I did also and no dice! Would it be possible for you to post that project ? or email me so I can compare the two?

CJK

unread,
Aug 22, 2013, 7:30:38 PM8/22/13
to clip...@googlegroups.com
Im such an as.... the class wasnt set .... now its connected and getting the static Lorem Ipsum text though??

CLIPS Support

unread,
Aug 22, 2013, 7:52:33 PM8/22/13
to clip...@googlegroups.com
It would probably be easier if you attached your project. If it's connected and the text isn't getting changed then the view controller method probably isn't getting called or its a different view controller. If the outlet is properly connected, you should be able to determine that just by directly setting the text in the viewDidLoad code of the view controller.

- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

    _outputView.text = @"outlet is connected";

Chris Koncur

unread,
Aug 22, 2013, 7:59:46 PM8/22/13
to clip...@googlegroups.com
Gary,

Here is the sample project I am testing with. Thank you very much for taking the time to help.


--
You received this message because you are subscribed to the Google Groups "CLIPSESG" group.
To post to this group, send email to CLIP...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/CLIPSESG?hl=en
 
--> IF YOU NO LONGER WANT TO RECEIVE EMAIL <--
Visit this group at http://groups.google.com/group/CLIPSESG?hl=en
Click on "Edit my membership" link.
Select the "No Email" radio button.
Click the "Save these settings" button.

--> IF YOU WANT TO UNSUBSCRIBE <--
Visit this group at http://groups.google.com/group/CLIPSESG?hl=en
Sign in
Click on "Edit my membership" link.
Click the "Unsubscribe" button.
Note: This appears to be the most reliable way to unsubscribe
 
Alternately, send email to CLIPSESG-u...@googlegroups.com. You will receive an email which you must respond to as well to unsubscribe. Clicking the link mentioned in the unsubscribe reply does not appear to work reliably.
---
You received this message because you are subscribed to a topic in the Google Groups "CLIPSESG" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/clipsesg/Birk6kK8opk/unsubscribe.
To unsubscribe from this group and all its topics, send an email to clipsesg+u...@googlegroups.com.
Archive.zip

CLIPS Support

unread,
Aug 23, 2013, 7:08:38 PM8/23/13
to clip...@googlegroups.com
Because you're using a storyboard, the CLIPS code is being executed in the AppDelegate before the view is created. If you move the code from the AppDelegate to the view controller, you can delay CLIPS execution until the view actually appears. That's probably a more realistic scenario anyway (that CLIPS won't be executed immediately upon app startup but rather in response to the user interacting with a UI control). It also appears that the project you're using was created with Xcode 5. I'd suggest using Xcode 4.6.3 instead unless you have a compelling reason for using the prerelease software.
MABSB.zip

CLIPS Support

unread,
May 4, 2015, 9:24:02 PM5/4/15
to clip...@googlegroups.com
I've added some iOS versions of some of the Java examples. Details are available here: http://clipsrules.sourceforge.net/CLIPSiOS.html
Reply all
Reply to author
Forward
0 new messages